人工智能课后作业_python实现广度优先遍历搜索(BFS)(附源码)

2 广度优先遍历搜索(BFS)

  • 2.1算法介绍
  • 2.2实验代码
  • 2.3实验结果
  • 2.4实验总结

2.1算法介绍

广度优先搜索算法(英语:Breadth-First-Search,缩写为BFS),是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。BFS是一种盲目搜索法,目的是系统地展开并检查图中的所有节点,以找寻结果。

BFS会先访问根节点的所有邻居节点,然后再依次访问邻居节点的邻居节点,直到所有节点都访问完毕。在具体的实现中,使用open和closed两个表,open是一个队列,每次对open进行一次出队操作(并放入closed中),并将其邻居节点进行入队操作。直到队列为空时即完成了所有节点的遍历。closed表在遍历树时其实没有用,因为子节点只能从父节点到达。但在进行图的遍历时,一个节点可能会由多个节点到达,所以此时为了防止重复遍历应该每次都检查下一个节点是否已经在closed中了。

人工智能课后作业_python实现广度优先遍历搜索(BFS)(附源码)_第1张图片

依然使用上面的这个例子,如果使用BFS进行遍历,那么节点的访问顺序是“1-2-7-8-3-6-9-12-4-5-10-11”。可以看出来BFS进行遍历时是一层一层的搜索的。

人工智能课后作业_python实现广度优先遍历搜索(BFS)(附源码)_第2张图片

在应用BFS算法进行八数码问题搜索时需要open和closed两个表。首先将初始状态加入open队列,然后进行出队操作并放入closed中,对出队的状态进行扩展(所谓扩展也就是找出其上下左右移动后的状态),将扩展出的状态加入队列,然后继续循环出队-扩展-入队的操作,直到找到解为止。

上图这个例子中,红圈里的数字是遍历顺序。当找到解时一直往前找父节点即可找出求解的移动路线。

2.2实验完整源代码

下载链接:https://download.csdn.net/download/DeepLearning_/87280758

2.3实验结果

仍然用相同的例子,用BFS进行搜索。

人工智能课后作业_python实现广度优先遍历搜索(BFS)(附源码)_第3张图片

将找出的解从初始状态一步一步输出到解状态。

人工智能课后作业_python实现广度优先遍历搜索(BFS)(附源码)_第4张图片

从结果中可以看出总共进行了27次遍历,并在第4层时找到了解状态。

下面我们来看一看BFS的所有27次遍历,以此来更深入的理解BFS的原理。稍微对代码进行改动,使其输出遍历次数和当前层数。由于结果太长,为了方便展示,下面将以树的形式展示。

人工智能课后作业_python实现广度优先遍历搜索(BFS)(附源码)_第5张图片

上面输出的解就是按照红色路线标注找到的,从遍历次数可以看出是一层一层的找。

2.4实验总结

下面我们来看一看BFS的所有27次遍历,以此来更深入的理解BFS的原理。稍微对代码进行改动,使其输出遍历次数和当前层数。由于结果太长,为了方便展示,下面将以树的形式展示。

上面输出的解就是按照红色路线标注找到的,从遍历次数可以看出是一层一层的找。

2.4实验总结

由于BFS是一层一层找的,所以一定能找到解,并且是最优解。虽然能找到最优解,但它的盲目性依然是一个很大的缺点。从上面的遍历树状图中,每一层都比上一层元素更多,且是近似于指数型的增长。也就是说,深度每增加一,这一层的搜索速度就要增加很多。

你可能感兴趣的:(人工智能,python,宽度优先,算法,广度优先遍历搜索,BFS)