我有一个描述巨大网络的数据库。它由大约 18000 个顶点组成。现在我需要找到一对节点之间所有可能的最短路径。我已经尝试实现迭代 DFS,但问题是指数增长。所需的时间量变得巨大,因为顶点具有高出度。你能建议一些工作更快的算法吗?我拥有的复杂网络是定向和加权的。任何建议都会有很大帮助。
谢谢, 埃克塔
我有一个描述巨大网络的数据库。它由大约 18000 个顶点组成。现在我需要找到一对节点之间所有可能的最短路径。我已经尝试实现迭代 DFS,但问题是指数增长。所需的时间量变得巨大,因为顶点具有高出度。你能建议一些工作更快的算法吗?我拥有的复杂网络是定向和加权的。任何建议都会有很大帮助。
谢谢, 埃克塔
对于具有正权重的加权图,通常使用统一成本搜索,即Dijkstra 算法。在特定情况下,其他算法可能更快。例如,如果您的数据允许您定义启发式函数,则可以改用A*。或者,如果您的网络是无标度的(即它的度数是幂律分布的),您可以使用Peng 等人 12中描述的 Dijkstra 算法的变体。
您可能还想查看一堆相关的 SO 问题,例如是否有比 Dijkstra 算法更好的方法来寻找不超过指定成本的最快路径或是否有比 Dijkstra 更快的算法?.
编辑:要查找给定节点对之间的所有最短路径,您仍然可以使用 Dijkstra,并进行一些更改:
您也可以看看这个问题(尽管它涉及未加权图):Finding all the shortest paths between two nodes in unweighted undirected graph