搜索问题

宽度优先搜索(BFS)

  完备性:BFS是完备的(即当解存在时,能保证得到解)

  最优性:BFS总能保证得到最优解(考虑代价时)

  时间复杂度:是O(bd)b为最大子节点数,d为搜索树深度

  空间复杂度:也是O(bd

通常用队列实现

深度优先搜索(DFS)

  在避免重复节点的有限状态空间中,DFS是完备的

  DFS不能保证得到最优解

  在避免重复节点的有限状态空间中,DFS的时间复杂度是O(bm),b为最大节点数,m为最大深度

DFS的空间复杂度是O(bm),远远小于BFS

通常使用栈实现

双向搜索

双向搜索是对宽度优先搜索的一种扩展

基本思想是同时运行两个宽度优先搜索,一个从初始状态向前搜索,另一个从终止状态向后搜索

当两个搜索在中间结点相遇时,计算停止 (最优解还需要额外搜索)

与BFS 相比,双向搜索的树深度有明显减小,因此复杂度会大大降低,约为 O(bd/2 )

启发式搜索

BFS 值考虑了起始点到当前结点的代价,启发式搜索还进一步考虑当前结点到目标结点的代价(估计值)

对每个结点设定评价函数 f(n)(通常由一个启发函数 h(n) 计算)

依据评价函数制定搜索策略

 

贪婪搜索

与 BFS 相反,贪婪搜索只考虑了当前结点到目标结点的代价,深度优先搜索双向搜索其他搜索问题未考虑起始结点到当前结点的代价

贪婪启发信息能够使搜索快速收敛到解

得到的解不一定是最优解

在某些情况下贪婪搜索是不完备的

 

A*搜索

A*搜索使用的评价函数为 f(n) = h(n) + g(n)

其中g(n)是起始节点到当前节点n话费的代价,h(n)是当前节点到目的地节点的最小代价路径估计。

可见,A*搜索同时考虑了起始节点到当前节点的代价(可准确计算)和当前节点目标节点的代价(估计值),启发策略:优先扩展边缘节

点集中f(n)最小的节点。

可采纳性: h(n) 不会高估达到目标的代价。(如直线距离启发函数。因为两点之间直线距离最短,所以采用直线距离作为启发函数永远不会大

实际距离。)

posted @ 2019-04-29 23:18  陈十一  阅读(502)  评论(0编辑  收藏  举报