BFS
2016-06-15 21:01
239 查看
广度优先搜索(breadth-first search)是图搜索算法之一,
给定图G=(V,E)和一个特定的源顶点s的情况下,广度优先搜索系统地探索G的边,以期”发现”可从s到达的所有顶点,并计算s到所有这些可达顶点之间的距离(最少的边数),该搜索算法同时还能生成一颗根为s,且包括所有s的可达顶点的广度优先书
算法的复杂度分析(聚合分析)
在初始化操作结束后,广度优先搜索不会给任何节点涂上白色,而且每个节点的入队次数最多一次,因而出对最多一次,入队和出对的时间均为O(1),则对队列进行的操作的总时间为O(V).算法只在一个结点出队的时候才对该节点的邻接表进行扫描,所以每个邻接表最多只扫描一次,由于所有邻接表的长度之和为Δ(E),故扫描邻接表的总时间为O(E),初始操作的成为为O(V),因此广度优先搜索的总运行时间为O(V+E).是邻接表的线性函数
引理 给定G=(V,E),G是一个有向图或无向图,设s∈V为任意结点,则对于任意边(u,v)∈E,δ(s,v)⩽δ(s,u)+1
引理
设G=(V,E)是一个有向图或无向图,假定BFS以给定结点s∈V作为源节点在图G上运行,那么在BFS终止时,对每个节点v∈V,BFS所计算出的v.d满足v.d⩾δ(s,v)
证明:
归纳假设:对所有的结点v∈V,v.d⩾δ(s,v)
从源节点s加入队列Q,此时s.d=0=δ(s,s),并且对所有的结点v∈V−{s},v.d⩾δ(s,v),归纳假设成立
对于归纳步:考虑结点u进行邻接表搜索时所发现的白色结点v,根据归纳假设有u.d⩾δ(s,u),可知
v.d=u.d+1⩾δ(s,u)+1⩾δ(s,v)
结点v涂为灰色,加入队列,值不再发生改变,假设成立
引理
假定BFS在图G=(V,E)上运行的过程中,队列Q包含的结点为⟨v1,v2,⋯,vr⟩,这里v1是队列的头,vr 是队列的尾,那么vr.d⩽v1.d+1,并且对于i=1,2,\dcot,r−1成立vi.d⩽vi+1.d
证明:
在初始情况下,队列Q只包含源结点s,引理成立。
对于归纳步:(出队和入队操作时引理成立即可)如果头结点v1被删除,v2成为队列新的头结点(如果队列删除头结点为空,引理直接成立),根据假设,有v1.d⩽v2.d,则有vr.d⩽v1.d+1⩽v2.d+1,余下的不等式不受影响。
将一个结点加入队列的情况:将结点v加入队列Q时,该结点成为结点vr+1,这时已删除结点u,并对该节点的邻接表进行检查,根据假设,新的头结点v1满足v1.d⩾u.d,则vr+1.d=v.d=u.d+1⩽v1+1,根据假设还有vr.d⩽u.d+1,因此vr.d⩽u.d+1=v.d=vr+1.d+1, 余下的不等式不受影响,故假设成立
假定在执行BFS时,结点vi和节点vj都加入队列Q中,并且vi在vj前面入队,则在vj入队时,vi.d⩽vj.d
广度优先搜索的正确性
设G=(V,E)为一个有向图或无向图,又假设BFS以s为源结点在图G上运行,那么在算法运行过程中,BFS将发现从源节点s可以到达的所有节点v∈V,并在算法终止时,对于所有的v∈Vv.d=δ(s,v).而且,对于任意可以从s到达的结点v≠s,从源节点s到结点v的其中一条最短路径为从结点s到接待呢v.π的最短路径再加上(u,v).
证明:(反证法)假设某些结点获取的d值并不等于其最短路距离。设v就是这样的结点,则其最短路路径为δ(s,v),而其获得的d值不等于δ(s,v),显然v≠s,由引理知:d⩾δ(s,v),则d>δ(s,v).结点v必定是可以从s可到达的结点,否则δ(s,v)=∞⩾⩾d.设u为从源节点到结点v的最短路径v的直接前驱,则δ(s,v)=δ(s,u)+1,因为δ(s,u)⩽δ(s,v),
给定图G=(V,E)和一个特定的源顶点s的情况下,广度优先搜索系统地探索G的边,以期”发现”可从s到达的所有顶点,并计算s到所有这些可达顶点之间的距离(最少的边数),该搜索算法同时还能生成一颗根为s,且包括所有s的可达顶点的广度优先书
BFS(G,s) for each vertex u $\in V[G]-\{s\}$ u.color=WHITE u.d=$\infty$ u.$\pi$=NIL s.color=GARY s.d=0 s.$\pi$=NIL Q=$\empty$ ENQUEUE(Q,s) while Q$\neq \empty$ u=DEQUEUE(Q) for each $v\in G.Adj[u]$ if v.color==WHITE v.color=GRAY v.d=u.d+1 v.$\pi$=u ENQUEUE(Q,v) u.color=BLACK
算法的复杂度分析(聚合分析)
在初始化操作结束后,广度优先搜索不会给任何节点涂上白色,而且每个节点的入队次数最多一次,因而出对最多一次,入队和出对的时间均为O(1),则对队列进行的操作的总时间为O(V).算法只在一个结点出队的时候才对该节点的邻接表进行扫描,所以每个邻接表最多只扫描一次,由于所有邻接表的长度之和为Δ(E),故扫描邻接表的总时间为O(E),初始操作的成为为O(V),因此广度优先搜索的总运行时间为O(V+E).是邻接表的线性函数
最短路径
定义从源节点s到节点v的最短路径距离δ(s,v)为从结点s到节点v之间所有路径里边最少的边数。如果没有从结点s到结点v之间没有路径,则δ(s,v)=∞.成从结点s到结点v的长度为δ(s,v)的路径为s到v的最短路径。引理 给定G=(V,E),G是一个有向图或无向图,设s∈V为任意结点,则对于任意边(u,v)∈E,δ(s,v)⩽δ(s,u)+1
引理
设G=(V,E)是一个有向图或无向图,假定BFS以给定结点s∈V作为源节点在图G上运行,那么在BFS终止时,对每个节点v∈V,BFS所计算出的v.d满足v.d⩾δ(s,v)
证明:
归纳假设:对所有的结点v∈V,v.d⩾δ(s,v)
从源节点s加入队列Q,此时s.d=0=δ(s,s),并且对所有的结点v∈V−{s},v.d⩾δ(s,v),归纳假设成立
对于归纳步:考虑结点u进行邻接表搜索时所发现的白色结点v,根据归纳假设有u.d⩾δ(s,u),可知
v.d=u.d+1⩾δ(s,u)+1⩾δ(s,v)
结点v涂为灰色,加入队列,值不再发生改变,假设成立
引理
假定BFS在图G=(V,E)上运行的过程中,队列Q包含的结点为⟨v1,v2,⋯,vr⟩,这里v1是队列的头,vr 是队列的尾,那么vr.d⩽v1.d+1,并且对于i=1,2,\dcot,r−1成立vi.d⩽vi+1.d
证明:
在初始情况下,队列Q只包含源结点s,引理成立。
对于归纳步:(出队和入队操作时引理成立即可)如果头结点v1被删除,v2成为队列新的头结点(如果队列删除头结点为空,引理直接成立),根据假设,有v1.d⩽v2.d,则有vr.d⩽v1.d+1⩽v2.d+1,余下的不等式不受影响。
将一个结点加入队列的情况:将结点v加入队列Q时,该结点成为结点vr+1,这时已删除结点u,并对该节点的邻接表进行检查,根据假设,新的头结点v1满足v1.d⩾u.d,则vr+1.d=v.d=u.d+1⩽v1+1,根据假设还有vr.d⩽u.d+1,因此vr.d⩽u.d+1=v.d=vr+1.d+1, 余下的不等式不受影响,故假设成立
假定在执行BFS时,结点vi和节点vj都加入队列Q中,并且vi在vj前面入队,则在vj入队时,vi.d⩽vj.d
广度优先搜索的正确性
设G=(V,E)为一个有向图或无向图,又假设BFS以s为源结点在图G上运行,那么在算法运行过程中,BFS将发现从源节点s可以到达的所有节点v∈V,并在算法终止时,对于所有的v∈Vv.d=δ(s,v).而且,对于任意可以从s到达的结点v≠s,从源节点s到结点v的其中一条最短路径为从结点s到接待呢v.π的最短路径再加上(u,v).
证明:(反证法)假设某些结点获取的d值并不等于其最短路距离。设v就是这样的结点,则其最短路路径为δ(s,v),而其获得的d值不等于δ(s,v),显然v≠s,由引理知:d⩾δ(s,v),则d>δ(s,v).结点v必定是可以从s可到达的结点,否则δ(s,v)=∞⩾⩾d.设u为从源节点到结点v的最短路径v的直接前驱,则δ(s,v)=δ(s,u)+1,因为δ(s,u)⩽δ(s,v),
相关文章推荐
- 349. Intersection of Two Arrays
- 详解网络传输中的三张表,MAC地址表、ARP缓存表以及路由表
- Python 文件和目录的操作
- 腾讯云一键搭建WordPress博客网站
- TeX系列: tikz-3dplot绘图宏包
- 修改win10和ubuntu17.10双系统启动顺序
- Java记事
- 数据库案例中创建连接池以及连接
- TeX系列: MATLAB和LaTeX结合绘图
- Android中Intent介绍
- opencv 处理视频并使用Qt窗口作为输出
- MySQL数据库引擎详细介绍
- C#实现的 快速查找通用组件 YHSoft.QuickFind
- [Shell]date获取指定日期的后几天
- android进程重启及activity恢复
- Servlet笔记
- 在CentOS系统上从零开始搭建WordPress博客的全流程记录
- Tex系列: pgfplots安装
- canvas_时钟
- java之修改并选择显示SQL Server数据库中的数据