boost最短路径查找算法

boost shortest path finding algorithm

美好的一天,亲爱的朋友们。

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

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

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

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

此外,我还可以预先计算一些需要图表的东西。

我该怎么办?

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

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

这取决于你有多少节点,正如你提到的,你的节点大约是 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* 算法可以 运行 比 Dijkstra 快,但它需要一个 启发式函数 ,它必须是 单调的 admissible 根据您的问题,可能很难找到该函数。

所以我认为 Dijkstra 足以满足您的需求