移动机器人运动规划---基于图搜索的基础知识---广度优先遍历与深度优先遍历
- 广度优先搜索(BFS)
- 深度优先搜索(DFS)
- BFS vs DFS
图搜索优化的方向就是:
按照什么规则去访问节点,按照什么规则弹出节点,使我们尽可能快的找到终止节点。
图遍历算法:
- 广度优先搜索
- 深度优先搜索
广度优先搜索 遵循先进先出的原则,维护的是一个队列
弹出元素,总是从队列的头弹出的
深度优先搜索 遵循的是后进先出的原则,维护的是一个堆栈
弹出从最上面弹出,最后进入容器的,最先被弹出来
广度优先搜索(BFS)
特点:每次弹出层级最浅的一个节点,维护的是一个队列的结构
所以搜索过程是一层一层进行的
最直观的理解就是一层一层的进行
BFS步骤的拆分:
这样的一个图结构,BFS的步骤是下面这样的
初始化容器是空的,首先放入开始节点S
弹出(访问)S节点,容器就再次变为空的
对S进行扩展,
从图上上可以看出,S可以扩展的是d\e\p
安照定义的规则,将扩展的节点以规则顺序放入容器中
与DFS区别就是,从下面弹出节点,先弹出p节点
然后再进行循环
最终找到终止节点,结束循环,完成图搜索。
深度优先搜索(DFS)
特点:每次弹出的节点是最深层级的一个节点,维护的是一个堆栈
直观的理解就是没次把一个分支走到底
DFS步骤的拆分:
注意—维护的是一个栈的结构
这样的一个图结构,DFS的步骤是下面这样的
初始化容器是空的,首先放入开始节点S
弹出(访问)S节点,容器就再次变为空的
对S进行扩展,
从图上上可以看出,S可以扩展的是d\e\p
安照定义的规则,将扩展的节点以规则顺序放入容器中
然后深度优先搜索是弹出容器中的,后入的节点(层级最深的),即d节点
然后再扩展d节点,将扩展节点放入容器,再弹出该弹出的节点,再扩展,再放入的循环操作
最终找到终止节点,结束循环,完成图搜索。
BFS vs DFS
从最终的遍历结果图中,可以看到两者的区别
- BFS是从开始节点一层一层的去向外扩展,直到扩展到了目标节点,然后回溯去找到最短路径。
- DFS是从开始节点一条路走到头,去找到目标节点。
由结果来看,BFS 找到的路径是最短的
所以对应移动机器人,在做路径规划找最短路径时,做好的方法就是BFS