给定一个包含许多节点的无向加权图,如何计算所有对最短路径的子集?
子集是指图中的一些节点,而不是所有节点(图的顶点子集,可以手动指定,或者从某些聚类算法指定。所选顶点的计数可以是1%~5%总顶点)。
Dijkstra或Floyd-Warshall可能会计算额外的节点,这可能对我的应用程序来说效率不高。
是否存在计算特定节点之间所有对最短路径并获得良好性能的算法?
答案 0 :(得分:0)
基本上,我认为您不能只考虑某些节点,因为子图中的最短路径可能不是全局最短的。因此,您必须考虑所有节点。
也许您可以像这样实现Dijkstra的算法:在每次迭代中设置一个check子例程。如果所有需要的节点都已固定(找到了最小路径),则终止算法。这样可以节省其余节点的时间。
为了提高效率,如果没有负边长,建议使用n倍Dijkstra算法。如果有的话,请使用Johnson算法,该算法提供了一种特殊的加权技术,可以将负边缘长度转换为非负边缘长度。
也许您只需要一个更快的服务器。
希望有帮助。