麻省理工学院——人工智能公开课04

 

这一讲开始讨论各种搜索算法,首先是最基本的大英博物馆法,也就是一种找出所有路径的蛮力算法这种算法时间搜索长,占用空间大。

之后讲解了深度优先搜索算法和广度优先搜索算法,

深度优先算法是怎样实现的呢?

他是从树根开始往下搜索,每次遇到分叉的时候总选择向左边的一条路径搜索,当搜索到路的尽头时,回溯到上一个分叉,然后选择右边的路径继续深度优先搜索,直到搜索到目标节点为止。

广度优先搜索是怎样实现的呢?

它是从根节点开始,沿着树的宽度搜索树的节点,当同一层搜索完后仍为搜索到需搜索的节点时,跳转到树的下一层继续搜索。

具体怎么实现的呢?

首先初始化一个队列,然后把第一个路径放到队列里,然后检验第一个队列是不是你想要的,如果不是,则将拓展路径入队,对于深度优先搜索,拓展队列放在队列的前端,这样,深度优先搜索的模型就出来了:

1,初始化一个队列,

2,将第一个路径放到队列里,

3,检验是否符合要求,

4,不符合要求则将第一个路径拓展后放在列首,

5 ,回到第二步,
至于广度优先搜索,只需要把第4步中的置于列首改成置于列尾就好,其他步骤都一样
之后介绍了搜索中如何避免重复搜索,并用其分别优化深度优先和广度优先算法,得到爬山算法和束搜索算法。


怎么避免重复呢?
这里添加一个位置列表,出现过的节点都会记录在列表里,这样,当需要拓展的时候,就检验待拓展节点是否在位置列表里出现过。如果出现过,就不再拓展。


怎么又优化深度优先算法得到爬山算法呢?
事实上,深度优先算法是优先选择分叉的左边开始搜索,而左边不一定是最好的,所以我们将这一步优化为优先选择离目标近的节点,这样改进之后,就得到了爬山算法。


怎么实现呢?
很简单,只需要在上面的第三步之后加上一步,将待拓展节点排序,小的放前面,然后继续下面的步骤。
怎么优化广度优先算法得到束算法呢?


首先我们需要限制每一层的束宽a,然后每一层中,我们只考虑离目标较近的a个节点,其他的去掉,这样就得到了束算法。这个算法的实现也很简单,只需要排序得到束宽就可,其他步骤不变。


最后,讲解了故事阅读中搜索的程序例子。

猜你喜欢

转载自blog.csdn.net/qq_42634921/article/details/86657974