artificial-intelligence - Dijkstra 与 A* 结果路径

标签 artificial-intelligence dijkstra a-star

当我在不同的图上运行 Dijkstra 和 A* 时,因为两者都是最优算法,所以我应该总是期望找到相同的路径,对吗?

如下图所示:

节点:S、A、B、C、D、E、G

边和成本: (S, A)=1, (A, B)=1 (B,C)=1, (A,E)=8,(A,D)=6,(D,G)=2

启发式:h(S)=6、h(C)=7、h(B)=6、h(A)=5、h(D)=2、h(E)=1、h(G) )=0

我发现 S->A->D->G 作为两者的路径。 对于 Dijkstra 和 A* 来说,这条路径的成本都是 9。

对于任何图表来说都是这样,因为两者都是最优的吗? 如果我想比较这两种算法,我应该用什么来统计,时间似乎也一样?

谢谢。

最佳答案

如果最短路径是唯一,那么任何正确的最短路径算法都必须准确找到该路径。

在起点和目标之间存在具有相同成本的多条路径的图表中,即使同一算法的不同实现也不能保证找到相同的路径,因为可能存在细微的差异,例如:

  • “探索”节点时处理节点传出边的顺序。
  • 从优先级队列中弹出相同值的节点的顺序。
  • 对于 A*,由于优先级队列的排序不同,不同的正确启发法通常会导致不同的路径(成本相同)。

If I want to compare these two algorithms, what should I use as statistics, time seems to be the same as well?

在足够大的图表上,当你有良好的启发式时,A* 最终会表现得更好。一个常见的例子是没有许多不可逾越的方 block 的网格,其中 Dijkstra 将大致探索一个圆圈,但 A*(如果给出适当的启发式)将近似瞄准目标并仅探索“粗线”。您可以在 this visualiation 上看到此效果的实际效果。 .

关于artificial-intelligence - Dijkstra 与 A* 结果路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60475458/

相关文章:

algorithm - Dijkstra 算法和 Prim 算法什么时候会产生不同的输出?

c++ - 是否可以从 C++ 中的二维节点数组创建邻接矩阵?

algorithm - 曼哈顿距离是否仍然是这个修改后的 n 谜题中可接受的启发式算法?

algorithm - 应用 A* 数独的启发式函数

algorithm - 树搜索算法(从边缘/队列中删除前面的节点-目标测试-扩展)

c++ - 在有向图中找到第二条最短路径

c++ - astar_search 在以 listS 作为顶点容器的图上?

java - 如何确定与道路相连的城市的 A* 搜索算法中的 H 成本

machine-learning - 监督学习,(ii) 无监督学习,(iii) 强化学习

Prolog - 运算符的绑定(bind)