跳转到内容

人工智能/搜索/穷举搜索/广度优先搜索

来自维基教科书,开放的书籍,开放的世界

广度优先搜索 (BFS) 技术是一种系统搜索策略,它从初始节点(初始状态)开始,并从初始节点开始,以广度优先的顺序在树结构上向下应用搜索操作。

搜索操作包括

  1. 选择一个节点作为当前节点
  2. 测试当前节点是否满足目标测试条件
  3. 如果目标状态没有达到,则以广度优先的顺序选择下一个节点
  4. 搜索在所有节点都被搜索过或找到目标时结束。

在汽车钥匙示例中,BFS 搜索顺序遵循节点序列:1、2、3、4、5……等等,以广度优先的顺序。BFS 搜索将首先遍历所有房间,然后遍历所有桌子,然后按顺序遍历所有抽屉。

               1.(  Home  )
                /    |     \
               /     |      \
       2.(room A)  3.(room B)  4.(room C)
             /   *car key
            /        | 
       5.(desk1)  6.(desk2)

图 1 汽车钥匙搜索空间

BFS 可以使用列表或队列数据结构实现。最初,列表只包含初始状态。搜索算法涉及反复测试和删除列表前面的第一个节点,然后找到并追加该节点的后继节点到列表中。此过程一直持续到列表中的第一个节点是目标状态或列表为空。

继续使用汽车钥匙示例,列表初始化为

[ 1 (home) ]

在节点 1 失败目标测试后,它从列表中删除,并且后继节点 2、3、4 被追加到列表中

[2. (room A), 3 (room B), 4 (room C)]

当节点 2 被测试并删除,并且节点 5 被追加时

[3 (room B), 4 (room C), 5 (desk1)]

当节点 3 被识别为目标状态时,搜索成功终止,即汽车钥匙在房间 B 中被找到。

优点和缺点

[编辑 | 编辑源代码]

BFS 是一种穷举搜索算法。它易于实现。它可以应用于任何搜索问题。将 BFS 与深度优先搜索算法进行比较,BFS 不受任何潜在的无限循环问题的影响,这可能会导致计算机崩溃,而深度优先搜索会深入搜索。BFS 的一个缺点是它是一种“盲目”搜索,当搜索空间很大时,与其他启发式搜索相比,搜索性能会很差。

如果搜索空间很小,BFS 的性能会很好。如果目标状态位于树的左上角,它表现最好。但如果目标状态位于树的底部,与深度优先搜索算法相比,它的性能会相对较差。如果链接上的权重是统一的,BFS 将始终找到最短路径。因此,BFS 是完整的且最佳的。正如我们所讨论的,BFS 中的内存利用率很差,因此我们可以说 BFS 比 DFS 需要更多内存。

参考资料

[编辑 | 编辑源代码]
华夏公益教科书