我已经测试了A*搜索算法与广度优先搜索(BFS)和深度优先搜索(DFS),发现A*搜索算法扩展更少的节点。
我理解A*使用启发式和边缘成本函数扩展已经更便宜的路径。
在哪些情况下,相较于A*搜索算法,BFS和DFS会更加高效呢?
我已经测试了A*搜索算法与广度优先搜索(BFS)和深度优先搜索(DFS),发现A*搜索算法扩展更少的节点。
我理解A*使用启发式和边缘成本函数扩展已经更便宜的路径。
在哪些情况下,相较于A*搜索算法,BFS和DFS会更加高效呢?
Dequeue()
的时间复杂度为O(1),而优先级队列为O(log n))。A*的优点在于它展开的节点通常比BFS少得多,但如果不是这种情况,BFS会更快。这可能发生在启发式函数很差、图非常稀疏或小,或者启发式函数无法针对给定的图进行操作。还有其他常数因素需要考虑。DFS只需要一个状态的副本,而A*在OPEN/CLOSED列表上保留许多状态。但在这些情况下,应使用IDA*。
请注意,在具有一致启发式的单向搜索中,理论上,A*执行必要扩展的数量最少,以证明解决方案是最优的。