in cassovary-core/src/main/scala/com/twitter/cassovary/algorithms/centrality/ClosenessCentrality.scala [25:38]
def _recalc(): Unit = {
graph foreach { node =>
val bfs = new BreadthFirstTraverser(graph, GraphDir.OutDir, Seq(node.id), Walk.Limits())
val (sum, reachableNodes) = bfs.foldLeft((0.0, 0.0)) {
case ((partialSum, partialCount), a) => (partialSum + bfs.depth(a.id).get, partialCount + 1)
}
centralityValues(node.id) = if (sum > 0 && graph.nodeCount > 1) {
val numerator = reachableNodes - 1
val denom = if (normalize) (graph.nodeCount - 1) / (reachableNodes - 1) else 1
numerator / (denom * sum)
}
else 0.0
}
}