《算法导论》笔记 第22章 22.2 广度优先搜索
来源:互联网 发布:网络中级工程师报名费 编辑:程序博客网 时间:2024/05/17 22:23
【笔记】
在给定图G=(V,E)和一个特定的源顶点s的情况下,广度优先搜索棵发现从s可达的所有顶点,并计算s到这些可达顶点之间的最短边数。
广度优先树,根为s,且包括所有s的可达顶点。树中从s到v的路径对应于图G中从s到v的一条最短路径,即包含最少边数的路径。对有向图无向图都适用。
如果u处于从根s到顶点v的路径中,那么u称为v的祖先,v是u的后裔。
分析
每个顶点至多只进入队列一次,至多只从队列中出来一次。对了列操作所需的全部时间为O(V)。
总运行时间为O(V+E)。
最短路径
定义从顶点s到v之间的最短路径距离δ(s,v)为从s到v的任何路径中最少的边数。如果没有通路则等于OO。
具有这一距离的路径即为从s到v的最短路径。
设G=(V,E)是一个有向图或无向图,s∈V为G的任意一个顶点,则对任意边(u,v)∈V,有:δ(s,v)<=δ(s,u)+1。
设G=(V,E)是一个有向图或无向图,并假设算法BFS从G中某一给定源点s∈V开始执行。在执行终止时,对每个顶点v∈V,BFS所计算出来的d[v]的值满足d[v]>=δ(s,v)。
假设在BFS的执行过程中将顶点vi和vj插入了队列,且vi先于vj入队。那么,当vj入队时,有d[vi]<=d[vj]。
设G=(V,E)是一个有向图或无向图,并假设过程BFS从G上某个给定的源顶点s∈V开始运行。在执行过程中,BFS可以发现原顶点s可达的每一个顶点v∈V。在运行终止时,对所有v∈V,都有d[v]=δ(s,v)。对任意从s可达的顶点v!=s,从s到v的最短路径之一是从s到π(v)的最短路径再加上边(π[v],v)。
广度优先树
如果V_π由从s可达的顶点所构成,则前驱子图G_π是一棵广度优先树,并且对于所有的v∈V_π,在G_π中都有唯一的从s到v的简单路径,该路径也同样是G中从s到v的一条最短路径。
当过程BFS应用于某一有向图或无向图G=(V,E)时,同时要构造出π域,使得前驱子图G_π=(V_π,E_π)是一棵广度优先树。
【练习】
22.2-1 对图示有向图,当指定源点为3时,所得d和π值是什么。
略
22.2-2 当指定源顶点为u时运行广度优先搜索算法,说明所得的d和π值是什么。
略
22.2-3 如果BFS的输入图是用邻接矩阵表示的,且对该算法加以修改以处理这种输入图表示,那么该算法的运行时间如何?
O(V^2)
22.2-4 试证明在广度优先搜索算法中,赋给顶点u的值d[u]与顶点在邻接表中的次序无关。说明BFS计算出来的广度优先树与邻接表中的顺序是有关的。
d[u]是最短路径,是确定的值。
22.2-5 举例说明,在有向图G=(V,E)中,源顶点s∈V,且树边集合E_π满足对每一顶点v∈V,图(V,E_π)中从s到v的唯一路径是G中的一条最短路径;然而,不论在每个邻接表中各顶点如何排列,都不能通过在G上运行BFS而产生边集E_π。
22.2-6 n个选手,r对比赛,给出O(n+r)的算法,使比赛在好选手与坏选手之间进行。
*22.2-7 树=(V,E)的直径定义为maxδ(u,v),即树中所有最短路径长度中的最大值。
随便找一个点x,搜索距离它最远的点y,再找距y最远的点z。 O(V+E)
*22.2-8 设G=(V,E)是一个连通的无向图。请给出一个O(V+E)时间的算法,以计算图G中的一条路径,对于E中的每一条边,该路径都恰好在一个方向上遍历一次。迷宫如何找出路?
- 《算法导论》笔记 第22章 22.2 广度优先搜索
- 算法导论 第22章, 广度优先搜索算法
- 算法导论 第22章 图算法 22.2 广度优先搜索
- 算法导论-第22章-基本的图算法-22.2 广度优先搜索(BFS)
- 广度优先搜索(算法导论第22章-基本的图算法)
- 算法导论-第22章-基本的图算法-22.2 广度优先搜索-22.2-4 用邻接矩阵方法实现BFS
- 《算法导论》笔记 第22章 22.3 深度优先搜索
- 算法导论 第23章 广度优先搜索 深度优先搜索 拓扑排序 强连通分量 C++实现
- 算法导论22.2广度优先搜索 练习总结
- 算法导论-----图(广度优先搜索)
- 图的广度优先搜索----算法导论
- 算法导论之广度优先搜索
- 第22章:图的基本算法—广度优先搜索和深度优先搜索
- 算法学习笔记--广度优先搜索(1)
- 《算法导论》中广度优先搜索的实现 c++
- 【算法导论】图的广度优先搜索遍历(BFS)
- 算法导论--广度优先搜索(无向图)
- 算法导论滴2章图的基本算法--广度优先搜索
- Cloud Chou's Tech Blog编译相关
- C++箴言:用传引用给const取代传值
- 续写某坑爹公司的教学笔记-Foundation整套Day01-04
- css使背景图片旋转
- jQuery制作的手风琴折叠菜单
- 《算法导论》笔记 第22章 22.2 广度优先搜索
- C++程序设计项目开发——银行自动提款机(三)
- 【Ubuntu】[服务配置单]:ubuntu安装好之后,不能使用setup命令(redhat是这个),显示服务配置表单,而是使用是sysv-rc-conf这个命令。
- 考试排名 2093
- hdu2845
- Oracle学习笔记(二):基本SELECT语句
- <s:property>的用法(jsp获取action中的值或者方法)
- cygwin下vim方向键不可用
- qte参数配置介绍