0

我正在开发一个语义 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 算法实现存在错误。有什么解释吗?难道我做错了什么 ?

谢谢您的帮助

4

2 回答 2

0

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

于 2013-12-26T06:55:35.197 回答
0

如果从顶点到任何其他节点没有边,则该顶点的接近中心性将除以 0。结果为 NaN。这就是为什么你会得到一些 vetex 的 NaN。

于 2014-10-16T15:35:25.237 回答