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 足以满足您的需求
美好的一天,亲爱的朋友们。
我想在随机图中找到最短路径。我使用升压图形库。据我了解,我需要使用点之间的现有距离来构建图形。之后我需要使用一些算法...
据我所知,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 足以满足您的需求