我是布卢明顿印第安纳大学计算机科学的研究生在我的一个研究项目中,我正在计算一个有向图的pageranks,这个有向图是非常稀疏的,并且有很高百分比的死链接。
所谓死链接,我是指节点的度数超过零。有时,在一个有很多死链的图中,可能会出现蜘蛛陷阱。不管怎样,我感兴趣的问题是找出这个场景中的pageranks。
我使用jung(javauniversalgraphnetwork)计算页面等级。
当我使用正常程序时,

Graph<String, String> jungGraph = new DirectedSparseGraph<String, String>();
PageRank<String, String> pagerank = new PageRank<String,String>(jungGraph, 0.2);
pagerank.setMaxIterations(20);
pagerank.setTolerance(0.000001);
pagerank.evaluate();

当我清楚地知道不应该是这样的时候,我得到的所有节点的pagerank值或多或少都是相同的。因为图中的某些节点具有大量的传出节点,并且是强互连的。
在这种情况下,建议的方法是什么我知道这门课有预科。我应该先提取没有死链的网络,计算它们的pageranks,然后将它们的秩传播到死链,直到它们收敛。?在后一种情况下,减少网络中的所有节点(outdegree!=0)将设置它们的优先级,而死区则不会。
我有什么遗漏吗?

最佳答案

我不认为你想要什么。
您正在使用哪个版本的PageRankWithPriors班级PageRank还是edu.uci.ics.jung.algorithms.importance.PageRank?前者在jung 2.0beta中已经被弃用,转而支持后者。
它们似乎以不同的方式对待0级节点,这可能是您的问题前者的规格说明是:
从节点u到
节点V等于
(1-alpha)[1/outdegree(u)]+
阿尔法(1/| V |)
如果你在原稿中没有外边
则使用0而不是
1/超出度(V)。
这似乎是错误的,因为它会导致概率的损失(通过某种方法离开u的总概率应该等于1,而不是)。后者的做法不同:
如果顶点没有传出边,
那么
从该顶点随机跳转
违约)有效1
这应该会保留你想要的概率。

09-25 21:21