提升最短路径寻找算法

时间:2015-05-20 09:09:13

标签: c++ boost graph path shortest-path

好日子,亲爱的朋友们。

我想在随机图中找到最短路径。我使用boost图库。据我所知,我需要使用点之间的现有距离来构建图形。之后我需要使用一些算法...

正如我所见,Dijkstra的算法确实找到了从1点到其他点的所有路径。 (它应该很慢?)

A *想要一些额外的数据(不仅是距离)

如何找到2点之间的最短路径?我在bgl文件夹中看到了许多最短路径算法标题,但我没有找到如何使用它们的示例。

此外,我可以预先计算图表的内容。

我该怎么办?

2 个答案:

答案 0 :(得分:1)

Dijkstra算法需要O(E log(n))时间 - 其中E = #edges,N =#nodes。 它应该足够快。请评论E和N的近似值。

在某些情况下(例如社交图),以下内容更快: - 假设边权重为1,N非常大,节点的程度很小(几百): 从node1执行2级BFS,从node2执行2级BFS并与集合相交。如果路径长度<= 4,您将找到它。

答案 1 :(得分:0)

这取决于您拥有多少个节点,正如您所提到的那样,节点大约为O(10 ^ 4),边缘为O(10 ^ 4),这是好的 所以在BOOST LIBRARY DOCS中很容易时间复杂度为O(V log V + E)。所以如果你把V = 10 ^ 4和E = 10 ^ 4你得到大约O(10 ^ 5)这是非常好的,可以在普通计算机上运行不到1秒,所以你可以使用它。

A *算法的运行速度可能比A *快,但需要启发式功能,必须单调可接受,这可能很难根据你的问题找到这个功能。

所以我认为Dijkstra对你的案子来说已经足够好了