public <T extends Edge> T getEnteringEdge(int i) { T e; elementLock.lock(); e = sg.getEdge(wrappedElement.getEnteringEdge(i).getIndex()); elementLock.unlock(); return e; }
public <T extends Edge> T getEnteringEdge(int i) { T e; elementLock.lock(); e = sg.getEdge(wrappedElement.getEnteringEdge(i).getIndex()); elementLock.unlock(); return e; }
/** * Choose an edge at random from the entering edges connected to the given * node. * * @param random * The random number generator to use. * @return An edge chosen at random, null if the node has no entering edges. * @complexity O(1). */ public static Edge randomInEdge(Node node, Random random) { int n = node.getInDegree(); if (n > 0) { return node.getEnteringEdge(random.nextInt(n)); // int r = random.nextInt(n); // int i = 0; // // for (Edge edge : node.getEnteringEdgeSet()) { // if (r == i) // return edge; // i++; // } } return null; }
/** * Choose an edge at random from the entering edges connected to the given * node. * * @param random * The random number generator to use. * @return An edge chosen at random, null if the node has no entering edges. * @complexity O(1). */ public static Edge randomInEdge(Node node, Random random) { int n = node.getInDegree(); if (n > 0) { return node.getEnteringEdge(random.nextInt(n)); // int r = random.nextInt(n); // int i = 0; // // for (Edge edge : node.getEnteringEdgeSet()) { // if (r == i) // return edge; // i++; // } } return null; }
protected void iteration() { double dampingTerm = (1 - dampingFactor) / graph.getNodeCount(); newRanks.clear(); double danglingRank = 0; for (int i = 0; i < graph.getNodeCount(); i++) { Node node = graph.getNode(i); double sum = 0; for (int j = 0; j < node.getInDegree(); j++) { Node other = node.getEnteringEdge(j).getOpposite(node); sum += other.getNumber(rankAttribute) / other.getOutDegree(); } newRanks.add(dampingTerm + dampingFactor * sum); if (node.getOutDegree() == 0) danglingRank += node.getNumber(rankAttribute); } danglingRank *= dampingFactor / graph.getNodeCount(); normDiff = 0; for (int i = 0; i < graph.getNodeCount(); i++) { Node node = graph.getNode(i); double currentRank = node.getNumber(rankAttribute); double newRank = newRanks.get(i) + danglingRank; normDiff += Math.abs(newRank - currentRank); node.addAttribute(rankAttribute, newRank); } iterationCount++; }
protected void iteration() { double dampingTerm = (1 - dampingFactor) / graph.getNodeCount(); newRanks.clear(); double danglingRank = 0; for (int i = 0; i < graph.getNodeCount(); i++) { Node node = graph.getNode(i); double sum = 0; for (int j = 0; j < node.getInDegree(); j++) { Node other = node.getEnteringEdge(j).getOpposite(node); sum += other.getNumber(rankAttribute) / other.getOutDegree(); } newRanks.add(dampingTerm + dampingFactor * sum); if (node.getOutDegree() == 0) danglingRank += node.getNumber(rankAttribute); } danglingRank *= dampingFactor / graph.getNodeCount(); normDiff = 0; for (int i = 0; i < graph.getNodeCount(); i++) { Node node = graph.getNode(i); double currentRank = node.getNumber(rankAttribute); double newRank = newRanks.get(i) + danglingRank; normDiff += Math.abs(newRank - currentRank); node.addAttribute(rankAttribute, newRank); } iterationCount++; }