我是布鲁明顿印第安纳大学计算机科学专业的研究生。对于我的一个研究项目,我正在计算一个非常稀疏并且死链数很高的有向图的页面。
通过死链接,我的意思是具有outdegree零的节点。有时,在具有大量死链接的图形中,可能会发生蜘蛛陷阱。无论如何,我感兴趣的问题是找到这种情况下的分页。
我正在使用JUNG(Java通用图形网络)来计算页面。
当我使用正常程序时,
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值。由于图中的某些节点具有大量传出节点并且具有很强的互连性。
在这种情况下建议的方法是什么。我知道有这个类PageRankWithPriors。我应该首先提取没有死链接的网络,为它们计算分页,然后将它们的排名传播到死链接,直到它们收敛为止。在后一种情况下,简化网络中的所有节点(outdegree!= 0)将设置其先验,而死链接不会。
我在这里遗漏了什么吗?
答案 0 :(得分:1)
我认为PageRankWithPriors
不是你想要的。
您使用的是PageRank
的哪个版本?课程edu.uci.ics.jung.algorithms.importance.PageRank
或edu.uci.ics.jung.algorithms.scoring.PageRank
?在Jung 2.0测试版中,前者已经被弃用而不赞成后者。
他们似乎以不同的方式对待outdgree 0节点,这可能是你的问题。前者的规范说:
从节点u到达的概率 节点v等于 (1-alpha) [1 / outdegree(u)] + 阿尔法(1 / | V |)
如果原件没有外边缘 然后用图0代替 1 /出度(V)。
这似乎是错误的,因为它会导致概率损失(通过某种方法离开u的总概率应该等于1,而它不会)。后者的做法不同:
如果顶点没有外边缘, 然后采取的概率 从该顶点随机跳跃(通过 默认)有效1
这应该保存你想要的概率。