我有一个描述庞大网络的数据库。它由大约18000个顶点组成。现在我需要找到一对节点之间所有可能的最短路径。我已经尝试实现迭代DFS,但问题是指数增长。所需的时间量变得很大,因为顶点具有高的出度。你能建议一些能更快运行的算法吗?我所拥有的复杂网络是有针对性和加权的。任何建议都会有很大的帮助。
谢谢, 的Ekta
答案 0 :(得分:0)
对于具有正权重的加权图,通常使用统一成本搜索,即Dijkstra's algorithm。在特定情况下,其他算法可以更快。例如,如果您的数据允许您定义启发式函数,则可以使用A*代替。或者,如果您的网络是无标度的(即其度数是幂律分布的),您可以使用Peng et al.'12中描述的Dijkstra算法的变体。
您可能还需要查看一些相关的SO问题,例如Is there better way than a Dijkstra algorithm for finding fastest path that do not exceed specified cost或Are there faster algorithms than Dijkstra?。
编辑:要查找给定节点对之间的所有最短路径,您仍然可以使用Dijkstra,只需进行一些更改:
您还可以查看此问题(虽然它涉及未加权的图表):Finding all the shortest paths between two nodes in unweighted undirected graph