【发布时间】:2014-12-28 22:13:02
【问题描述】:
考虑到我使用的数据,我想知道 JUNG2 和 PageRank 相对较慢的性能是否合理。
给定一个具有约 200 个顶点和约 40000 条边的图,计算该图的 PageRank 大约需要 15 秒。给定一个包含约 900 个顶点和约 800000 条边的图,计算该图的 PageRank 需要将近 5 分钟。
我意识到这些图表非常密集,可能自然需要一段时间来计算。然而,这些图并不是特别大,按照这个速度,一次只能计算一个图的一个小子集是不可能的。 (10,000 个顶点和 100,000,000 条边大约需要 8 小时)。
我使用 DirectedSparseGraph 以原始整数作为顶点和边,并且没有边权重。这些显然不是稀疏图,所以也许有更合适的图结构可以使用,对于密集图来说更优化?
我在服务器模式下运行具有大量堆空间的 jvm,并已确认整个图形都适合内存并且没有使用交换。
排序结果正确,总和为1,与Jung源内部和其他地方的测试样例相匹配。
也许有一个更高性能的方法和/或库来解决这个问题?但是,即使它快 10 倍,它似乎具有与边数成正比的时间复杂度这一事实是否意味着我很快就会超过 whatever 方法的限制我在用吗?
例如,我考虑过完全跳过图形方法并使用矩阵来表示转换概率,这可能会提供显着的提升。但是 - PageRank 并不是我唯一感兴趣的算法。如果我开始推出自己的方法,可以解决一个问题并引入其他几个问题。
另外,我使用的是双核 1Ghz 的慢速机箱,因此,您的数字可能会好很多(比如我的第一个示例中的 4-5 秒),但重点是成立的。我主要担心的是代码是否预计会以数量级的速度更快地运行,或者预计会以对数方式扩展。
无论如何,感谢您的见解。
【问题讨论】:
标签: performance graph jung pagerank