Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 从图上的每对节点查找所有最短路径_Algorithm_Graph_Graph Theory_Shortest Path - Fatal编程技术网

Algorithm 从图上的每对节点查找所有最短路径

Algorithm 从图上的每对节点查找所有最短路径,algorithm,graph,graph-theory,shortest-path,Algorithm,Graph,Graph Theory,Shortest Path,我有大约70k个节点和250k条边,图形不一定是连通的。显然,使用有效的算法至关重要。你推荐什么 作为旁注,我希望得到关于如何在多台机器之间分配任务的建议——对于这种问题,这可能吗 感谢MapReduce是一个很好的分布式算法,尽管它可能有点过于强大。如果你对此感兴趣,不妨看看,或者从中获得灵感。(事实上,当我学习MapReduce时,这是最早的例子之一。) 对于250k边和70k边,图似乎相对稀疏,在O(E+V log V)中为每个节点运行,整个运行时间(所有源)为O(VE+V^2 log V

我有大约70k个节点和250k条边,图形不一定是连通的。显然,使用有效的算法至关重要。你推荐什么

作为旁注,我希望得到关于如何在多台机器之间分配任务的建议——对于这种问题,这可能吗


感谢

MapReduce是一个很好的分布式算法,尽管它可能有点过于强大。如果你对此感兴趣,不妨看看,或者从中获得灵感。(事实上,当我学习MapReduce时,这是最早的例子之一。)

对于250k边和70k边,图似乎相对稀疏,在
O(E+V log V)
中为每个节点运行,整个运行时间(所有源)为
O(VE+V^2 log V)
。这应该足够快,但通常的警告适用于Dijkstra的。(负边缘。)

您还可以查看您的问题是否涉及负权重,而不是负循环。具体地说,它也可以是分布式的,因为它接受重新加权的图并从每个节点运行Dijkstra算法。

您可以使用。它正好解决了这个问题

复杂度为O(V^3)


还有一个复杂度为O(V^2*logv+VE)的函数。后者也很容易分发,因为它可以并行运行Dijkstra的算法V次。

有两种简单的并行方法:
1) 确定子组件并将其分布在不同的计算机上。来自两个不同组件的两个节点之间的路径长度未定义

2) 在不同的计算机中加载图形,并为每台计算机提供一个节点列表,以计算所有最短路径。一个节点的结果不依赖于另一个节点的结果,因此可以并行化此问题

好处:不太难实现,但我只会这样做,如果你必须解决这个问题一次。如果这是一个反复出现的问题,那么您可能想看看分布式算法


使用,它是用C编写的,速度非常快,您可以使用Python作为包装语言

查看包含以下关键词的论文/出版物:分布式图搜索算法。”这可能会有所帮助


还有一张只有ACM账户的纸:

Hm。但是它有
O(n^3)
复杂性。它可能不是很有效。@dirkgenty:事实上,复杂性类似于O(V^2+V*E)。这不是很快,但是如果你想要V^2输出,你可能无法获得更多。@jpalecek:我指的是原始帖子,尤其是弗洛伊德·沃沙尔。哇,弗洛伊德·沃沙尔是一个简洁的算法。如果我没有那么多节点,我肯定会选择它。后面的链接不会出现:你应该阅读关于如何格式化你的帖子的标记语法+我的意思是,似乎有一个链接限制。你是对的,这不是一个家庭作业问题,只是一个有趣的项目。我没有考虑过近似值,但在这种情况下,我需要得到两个节点之间的实际路径,而不仅仅是距离。我不知道近似值在这种情况下有什么真正的帮助,但如果它们可以的话,我想听听它们是如何帮助的。编辑:这是对删除的评论的回应。哦,很抱歉,我把它删掉了!我只是问您是否考虑过使用近似法求解,但后来我决定不问,因为您已经接受了答案。:)在这种情况下,近似值是一条不保证是最短的路径,但保证不比最短路径长x%以上的路径。您有18GiB的内存来存储解决方案吗?你真的需要全部吗?