一种更快的中介算法

时间:2018-04-23 05:04:06

标签: python neo4j graph-algorithm

是否有人知道在neo4j中找到图形数据库中所有节点之间的更快方法?

目前,我正在使用O(n ^ 2)解决方案,我找到每个可能的节点对之间的最短路径。

任何线索或实施都将非常感激。特别是如果它在python中。

1 个答案:

答案 0 :(得分:0)

我所知道的最快的中间性算法是the one by Brandes。它以O(nm)运行,即,如果图形稀疏,则速度明显更快。该算法相当复杂,可能没有在neo4j中实现。但是,应该可以实施它。

你为什么使用neo4j?你的图表是否太大而不适合主内存?我不知道neo4j,但这似乎是他们的卖点:他们可以在外部记忆中进行计算。如果不是这种情况,我强烈建议将整个图形加载到RAM中的一些简单表示中,并在那里进行计算。这几乎总是比在一些数据库后端上工作更快。

但是,如果您的图形对于主存储器来说太大,您可能需要考虑特别适合外部计算的替代算法。您可能还想考虑不能精确计算中间性的算法,但只能近似计算。

让我引用Bergamini and Meyerhenke的作品,它提供了非常好的文献综述([...]中的参考文献可以在论文中找到):

  

现存最快   用于精确BC计算的方法BA,需要Θ(nm)运算   未加权图和具有正边的图的Θ(nm + n 2 log n)   权重[7]。 BA计算[...算法的描述遗漏...]基于这个概念,一些算法用于近似   BC已经开发出来了。 Brandes和Pich [8]建议近似   cB(v)通过从源子集的贡献中推断出来   节点,也称为枢轴。随机均匀选择枢轴,   近似可以证明是cB(v)的无偏估计   (即它的期望等于cB(v))。在随后的工作中,   Geisberger等人。 [14]注意到这可能高估了BC的得分   节点靠近枢轴。为了限制这种偏见,他们引入了一个   缩放功能,对来自的贡献不太重要   靠近节点的枢轴。 Bader等。 [1]近似于BC   仅基于自适应采样技术的特定节点   减少具有高中心性的节点的枢轴数。   Chehreghani [9]提出了尝试的替代抽样技术   最小化样本数量。与以前的方法不同   是Riondato和Kornaropoulos [25]的近似算法,   在每次迭代中对单个随机最短路径进行采样。这个   方法允许对质量的理论保证   近似。