书:人工智能第2版
有需要电子版的可以私信我。
这次讲讲盲目搜索算法,分两个,分别是深度优先搜索(DFS)和广度优先搜索(BFS)。
其实还有迭代加深(DFS-ID)的深度优先搜索,不过好像书这里没讲。
这几种算法都是不适用领域知识的不知情搜索算法,即不知道状态空间的任何信息。(这句话我其实也不太理解,后面如果有提到我再回来补上解释)
算法简单说明
深度优先搜索
我记得大一的数据结构课有讲过这两种算法,对于深度优先搜索,其实就是,先对每个分支进行搜索,搜索到底了,再回去搜索其它分支。
这里借用书中的图讲解:
按照先先左后右的顺序,从顶点A开始一直往左走(A-B-D),到底了,回去一层往右走(D-B-E),又到底了,回退一层再回退一层(E-B-A),因为左分支全部到底了,所以就开始搜索右分支。
所以最终搜索顺序就是A-B-D-B-E-B-A-C-F-C-G(这里我是便于理解才写这么仔细,图中直接把重复的点给省略了,给出的搜索顺序是A-B-D-E-C-F-G)
广度优先搜索算法
这个也很好理解的,深度是深度优先,广度就是广度优先。它每次先把同一层的搜索完,再搜索下一层。还是用上面那个图来说明:
同样是先左后右的顺序,从顶点A开始,搜索第二层(B、C),然后搜索第三层(D、E、F、G)。
所以最终顺序是A-B-C-D-E-F-G。
例子讲解1
3拼图
规则,图(a)是初始态,其中有个空白块,我们需要移动空白块,使得这个图最终变成图(b)的状态。
这里,书中定义了移动的顺序(上-下-右-左),如果找到了目标状态就不再搜索。然后如果搜索过程中遇到已经出现的状态,则不再对它进行搜索,并用X标记。
好了,不多说,我直接把书中的图放上来:
深度优先:可以看到,从一个分支一直往下找,找到了目标,然后就停了,整体结构很狭长。
广度优先:可以看到,每次要搜索同一层级的所有状态,然后再搜索下一层,知道找到目标。整体结构很宽大。
对于优缺点,书中放在了后面,这次就到这里,下次继续。
觉得我讲的可以的麻烦可以点个赞吗?谢谢啦。