无信息搜索(下)

接上上篇

三、深度优先搜索

1.基本思想

        深度优先搜索总是扩展搜索树的当前边缘结点中最深的结点。搜索很快推进到搜索树的最深层,那里的结点没有后继。当那些结点扩展完之后,就从边缘结点集中去掉,然后搜索算法回溯到下一个还有未扩展后继的深度稍浅的结点。

       与宽度优先搜索使用FIFO队列不同,深度优先搜索使用LIFO(后进先出-Last In First Out)队列。

2.图例示意:

       二叉树的深度优先搜索。未探索区域用浅灰色表示。已经被探索并且在边缘中没有后代的结点可以从内存中删除。第三层的结点没有后继并且M是唯一的目标结点。

3.伪代码

       深度受限树搜索的递归实现:

4.属性

(1)深度优先搜索算法的效率严重依赖于图搜索还是树搜索。避免重复状态和冗余路径的图搜索,在有限状态空间是完备的。而树搜索则不完备。

(2)无论基于图搜索还是树搜索的深度优先搜索都不是最优的。

(3)时间复杂度

(4)空间复杂度

四、深度受限搜索

        这个问题可以通过对深度优先搜索设置界限l来避免。即深度为l的结点被当做没有后继对待,这种方法称为深度受限搜索。他解决了无穷路径的问题。但是如果我们选择了l<d,则最浅的目标结点的深度超过了深度限制,那么这种搜索算法是不完备的。如果选择的l>d,深度受限搜索同样也不是最优的。

时间复杂度:

空间复杂度:

五、迭代加深的深度优先搜索

1.基本思想:

        迭代加深的深度优先搜索经常和深度优先搜索结合使用来确定最好的深度界限。其做法是不断地增大深度限制-首先为0,接着为1,然后为2,以此类推-直到找到目标。当深度界限达到d,即最浅的目标结点所在深度时,就能找到目标结点。

2.图例示意:

3.伪代码:

4.属性:

(1)当分支因子有限时该搜索算法是完备的。

(2)当路径代价是结点深度的非递减函数时该算法是最优的。

(3)空间复杂度:

(4)时间复杂度: