部分全对最短路径

5

给定一个包含许多节点的无向加权图,如何计算所有节点最短路径的子集?

子集意味着图中的一些节点,而不是全部节点(图的顶点子集可能会被手动指定,也可能来自某些聚类算法。所选顶点的数量可能是总顶点的1%~5%)。

Dijkstra或Floyd-Warshall算法可能会计算额外的节点,这对我的应用程序可能不够高效。

是否有算法可以在特定节点之间计算所有对之间的最短路径,并获得良好的性能结果?


哪个子集? - user2357112
不是解决作业的好地方 :P - Sazzad Hissain Khan
2
@SazzadHissainKhan,我不太明白你在说什么。但这是一个具有挑战性的算法问题,对吧?而我并不擅长算法,无法解决它也很正常。在小公司中,程序员在开发过程中总是要做各种各样的工作。因此,公开提问是合理的。希望你能理解。 - My_Cat_Jessica
图的典型大小是多少?如果它非常大,那么n/100应被视为Theta(n),并且你应该使用Floyd-Warshall或类似的算法。如果它相对较小(例如n<=1000),并且n/100被认为是一个常数,则我认为你很难做得比多次使用Dijkstra算法更好...介于两者之间(这相当模糊,我同意),是复杂的部分... - gdelab
1个回答

0
基本上,我认为您不能只考虑一些节点,因为子图中的最短路径可能不是全局最短路径。所以您必须考虑所有节点。
也许您可以像这样实现Dijkstra算法:在每次迭代中设置一个检查子程序。如果所有所需节点都已固定(已找到最小路径),则终止算法。这将节省其他节点的时间。
为了效率,我建议如果不存在负边长度,则使用n次Dijkstra算法。如果有负边长,则使用Johnson算法,它提供了一种特殊的重新加权技术,将负边长转换为非负数。
也许您只需要一个更快的服务器。
希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接