Dijkstra vs A *结果路径

问题描述 投票:0回答:1

当我在不同的图形上运行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。

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

谢谢。

artificial-intelligence dijkstra a-star
1个回答
0
投票

如果最短路径是unique,则任何正确的最短路径算法都必须准确找到该路径。

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

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

如果要比较这两种算法,应该使用什么作为统计数据,时间似乎也相同?

在足够大的图上,当您具有良好的启发式时,A *最终将表现更好。一个常见的例子是没有许多不可逾越的瓷砖的网格,Dijkstra将在其中大致探索一个圆圈,而A *(如果给予适当的启发法)将大致瞄准目标并仅探索“粗线”。您可以在this visualiation上看到这种效果。


0
投票

对于任何图,总是这样,因为两者都是最优的吗?

A *可以看作是Dijkstra算法的改进版本。由于其启发式,它可以更快。但是只有在启发式函数为admissible时A *才是最优的,否则A *可以找到正确的解决方案,但与Dijkstra相比可能不是最优的。因此,只有当您仔细选择启发式方法时,答案是肯定的。

如果要比较这两种算法,应该使用什么作为统计数据,时间似乎也相同?

取决于。您是否要分析算法最终路径的质量或其速度?如果您的试探法很好(即可以接受),则只有执行时间会改变。

© www.soinside.com 2019 - 2024. All rights reserved.