使用Jung计算亲密度中心性

时间:2013-12-24 07:58:33

标签: java algorithm rdf jung jung2

我正在开发一个语义Web应用程序,并使用Jung库来应用一些图形计算,例如贴近度,介于两者之间等。我能够在我的rdf中找到每个节点的中介值并将其标准化。然而,ClosenessCentrality的情况并非如此,因为我获得了某些节点的NaN(非数字)分数。我的代码是:

int n =  graph.getVertexCount();// number of vertex 

double d = (double)(n-1)*(n-2)/2.0d; // this is to normalize the node value 

System.out.println("Applying ClosenessCentrality");

ClosenessCentrality<RDFNode, Statement> closeness = new ClosenessCentrality<RDFNode, Statement>(graph);

double[] closenessValues = new double[n];

Collection<RDFNode> closenessVertices = graph.getVertices();

int i = 0;

for (RDFNode vertex : closenessVertices)

closenessValues[i++] = closeness.getVertexScore(vertex) / d; // get the normalized score for each node

for (double score : closenessValues)

System.out.println(score);  // print all values.

所以,正如我之前提到的,由于某种原因,我得到了一些节点的NAN分数。当我得到NaN时,我觉得ClosenessCentrality算法实现有一个错误。有什么解释吗?我做错了什么?

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

我必须重新检查代码,但我敢打赌,如果有问题的顶点出现在没有最短路径上(因为它是一个断开的顶点或没有传入边缘),那么紧密度中心值可能会做一些奇怪的事情。我先检查一下。

答案 1 :(得分:0)

如果从顶点到任何其他节点没有边缘,那么该顶点的紧密度中心将除以0。 NaN就是结果。 这就是为什么你得到一些vetex的NaN。