in graphjet-core/src/main/java/com/twitter/graphjet/algorithms/PageRank.java [94:124]
private void iterate(double dampingAmount, LongArrayList noOuts) {
double nextPR[] = new double[(int) (maxNodeId + 1)]; // PageRank vector after the iteration.
// First compute how much mass is trapped at the dangling nodes.
double dangleSum = 0.0;
LongIterator iter = noOuts.iterator();
while (iter.hasNext()) {
dangleSum += prVector[(int) iter.nextLong()];
}
dangleSum = dampingFactor * dangleSum / nodeCount;
// Distribute PageRank mass.
iter = nodes.iterator();
while (iter.hasNext()) {
long v = iter.nextLong();
int outDegree = graph.getOutDegree(v);
if (outDegree > 0) {
double outWeight = dampingFactor * prVector[(int) v] / outDegree;
EdgeIterator edges = graph.getOutEdges(v);
while (edges.hasNext()) {
int nbr = (int) edges.nextLong();
nextPR[nbr] += outWeight;
}
}
nextPR[(int) v] += dampingAmount + dangleSum;
}
normL1 = computeL1Norm(prVector, nextPR);
prVector = nextPR;
}