Artificial intelligence 在什么情况下,BFS和DFS比*搜索算法更有效?

Artificial intelligence 在什么情况下,BFS和DFS比*搜索算法更有效?,artificial-intelligence,graph-theory,depth-first-search,breadth-first-search,a-star,Artificial Intelligence,Graph Theory,Depth First Search,Breadth First Search,A Star,我已经将*搜索与广度优先搜索(BFS)和深度优先搜索(DFS)进行了对比测试,发现使用*扩展的节点更少 我知道A*通过使用启发式和边代价函数来扩展已经比较便宜的路径 在什么情况下,BFS和DFS比*搜索算法更有效 BFS使用队列,而a*使用优先级队列。一般来说,队列比优先级队列快得多(例如,Dequeue()是O(1)vsO(logn))。A*的优点是,它通常比BFS扩展的节点少得多,但如果不是这样,BFS将更快。如果使用的启发式很差,或者图非常稀疏或很小,或者对于给定的图,启发式失败,则可能发

我已经将*搜索与广度优先搜索(BFS)和深度优先搜索(DFS)进行了对比测试,发现使用*扩展的节点更少

我知道A*通过使用启发式和边代价函数来扩展已经比较便宜的路径


在什么情况下,BFS和DFS比*搜索算法更有效

BFS使用队列,而a*使用优先级队列。一般来说,队列比优先级队列快得多(例如,
Dequeue()
O(1)
vs
O(logn)
)。A*的优点是,它通常比BFS扩展的节点少得多,但如果不是这样,BFS将更快。如果使用的启发式很差,或者图非常稀疏或很小,或者对于给定的图,启发式失败,则可能发生这种情况

请记住,BFS仅对未加权的图有用。如果图是加权的,则需要使用BFS的哥哥Dijkstra算法。该算法使用优先级队列,因此几乎不应该比a*快,除非启发式失败。

当启发式不一致时,广度优先搜索可能比a*快。(不一致的启发式不服从三角形不等式。一致的启发式从一个状态到下一个状态的变化不会超过边缘成本。)

使用不一致的启发式,A*可能会将N个状态扩展到2^N倍。发生这种情况的例子可以是。如果您想了解发生了什么,请逐步完成示例。BFS最多只能扩展每个状态一次。请注意,这可以通过算法B部分修复(N个状态最多扩展N^2倍),但这仍然是一个很大的开销。最近的算法有更好的最坏情况保证-N log C*,其中C*是最优的解决方案成本

如果目标在第一个分支上,深度优先搜索可能会优于A*和BFS。在中,您可以将目标放置在树中的不同状态,以查看发生了什么

还有其他的常量因素要考虑。DFS只需要一个状态副本,而*在打开/关闭列表中保留许多状态。但是,在这些情况下,应该使用IDA*


请注意,从理论上讲,在具有一致启发式的单向搜索中,a*所需的展开次数最少,以证明解决方案是最优的。

有趣的问题。您能否在问题中添加一个摘要,详细说明a*vs BFS vs DFS的节点扩展?