IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 算法导论(一)广度优先搜索和深度优先搜索 -> 正文阅读

[数据结构与算法]算法导论(一)广度优先搜索和深度优先搜索

算法导论第22章

本章讨论广度优先搜索和深度优先搜索,和深度优先搜索的两个应用:有向图的拓扑排序和将有向图分解为强连通子图。

广度优先搜索

基础定义:

  • color[v]:灰白黑。结点未被发现,初始时所有节点都被置为白色。第一次发现一个结点,将其置为灰色。当一个结点被搜索完,置为黑色。
  • δ [ v ] \delta[v] δ[v]:当前s到v的最短路将长度
  • π [ v ] \pi[v] π[v]:当前已知的s到v的最短路上v的前驱点

BFS算法描述:

BFS(G,s)
1 for each veertex u ∈ \in G.V - {s}
2 \quad u.color = WHITE
3 \quad u.d = ∞ \infty
4 u . π \quad u.\pi u.π = NIL
5 s.color = GRAY
6 s.d = 0
7 s. π \pi π = NIL
8 Q = ? \phi ?
9 ENQUEUE(Q,s)
10 while(Q ≠ ? \neq \phi ?=?)
11 u = D E Q U E U E ( Q ) \quad u = DEQUEUE(Q) u=DEQUEUE(Q)
12 f o r e a c h v ∈ G . a d j [ u ] \quad for each v \in G.adj[u] foreachvG.adj[u]
13 i f v . c o l o r = = W H I T E \quad \quad if v.color == WHITE ifv.color==WHITE
14 v . c o l o r = G R A Y \quad \quad \quad v.color = GRAY v.color=GRAY
15 E N Q U E U E ( Q , v ) \quad \quad \quad ENQUEUE(Q,v) ENQUEUE(Q,v)
16 v . d = v . d + 1 \quad \quad \quad v.d = v.d+1 v.d=v.d+1
17 v . π = u \quad \quad \quad v.\pi = u v.π=u
18 u . c o l o r = B L A C K \quad u.color = BLACK u.color=BLACK

最短路径

证明广度优先搜索可以正确计算出最短路径距离

引理22.1

给定G = (V,E),G为一个有向图或者无向图,设 s ∈ V s\in V sV为任意节点,则对任意边 ( u , v ) ∈ E , δ ( s , v ) ≤ δ ( s , u ) + 1 (u,v)\in E,\delta (s,v)\leq \delta (s,u)+1 (u,v)E,δ(s,v)δ(s,u)+1
证明
1、如果u是s可达的,则v也是,从s出发沿s到u的最短路,再经边(u,v)到v是一条s到v的普通路,则该路的长度为 δ ( s , u ) + 1 > = δ ( s , v ) \delta(s,u) +1>=\delta(s,v) δ(s,u)+1>=δ(s,v)
2、如果u不是s可达的, δ ( s , u ) = ∞ \delta(s,u) = \infty δ(s,u)=
δ ( s , v ) < = δ ( s , u ) + 1 \delta(s,v) <= \delta(s,u) + 1 δ(s,v)<=δ(s,u)+1

引理22.2

设G(V,E)是一个有向图,无向图,BFS是以给定节点 s ∈ V s \in V sV作为源点在图G上运行,那么在BFS算法终结的时候,对每一个节点 v ∈ V v\in V vV,BFS所计算出来的v.d满足 v . d ≥ δ ( s , v ) v.d \geq \delta(s,v) v.dδ(s,v)
证明 对算种种的入队操作次数进行归纳
1、归纳基础:s.d = δ ( s , s ) = 0 \delta(s,s) = 0 δ(s,s)=0
2、归纳假设:第k次入队后,KaTeX parse error: Undefined control sequence: \inV at position 10: \forall v\?i?n?V?,v.d \beq\delta…
3、虚证明对第k+1次入队操作, ? v ∈ V , v . d ≥ δ ( s , v ) \forall v\in V,v.d\geq\delta(s,v) ?vV,v.dδ(s,v)
设第k+1次入队的是v, π [ v ] = u . d [ v ] = d [ u ] ≥ δ ( s , u ) + 1 ≥ δ ( s , v ) \pi[v] = u. d[v] = d[u]\geq \delta(s,u) + 1\geq\delta(s,v) π[v]=u.d[v]=d[u]δ(s,u)+1δ(s,v)

引理 22.3

假定BFS在图G = (V,E)上运行的过程中,队列Q包含的的节点为 < u 1 , v 2 , . . . , v r > <u_1,v_2,...,v_r> <u1?,v2?,...,vr?>,这里 v 1 v_1 v1?是队列Q的头, v r v_r vr?是队列Q的尾。那么 v r . d ≤ v 1 . d + 1 ( 1 ) v_r.d \leq v_1.d+1\quad(1) vr?.dv1?.d+1(1)
v i ≤ v i + 1 ( 2 ) v_i \leq v_{i+1}\quad(2) vi?vi+1?(2)
证明对队列的变化数进行归纳证明:
1、归纳基础; Q = < s >
2、归纳假设 假设第k次队列变化后,条件(1)(2)成立,证明第k+1次变化后条件(1)(2)依然成立
3、:
3.1 第k+1次是出队操作
Q = < v 2 , v 3 , . . . , v r > <v_2,v_3,...,v_r> <v2?,v3?,...,vr?>
d [ v r ] ≤ d [ v 1 ] + 1 ≤ d [ v 2 ] + 1 d[v_r] \leq d[v_1] + 1\leq d[v_2] + 1 d[vr?]d[v1?]+1d[v2?]+1
d [ v i ] ≤ d [ v i + 1 ] d[v_i] \leq d[v_{i+1}] d[vi?]d[vi+1?]
3.2 第k+1次是入队操作
Q = < v 1 , v 2 , . . . , v r , v r + 1 > <v_1,v_2,...,v_r,v_{r+1}> <v1?,v2?,...,vr?,vr+1?>
v r + 1 v_{r+1} vr+1?入队,那么一定有结点u被扫描邻接链表,则u是刚从队列中出队,在u从队列中出队前瞬间,队列状态
{ < u , v 1 , v 2 , . . . , v r > ( 1 ) < u , v 1 , v 2 , v k > k < r ( 2 ) < u > ( 3 ) \left\{\begin{matrix} <u,v_1,v_2,...,v_r>\quad(1)\\ <u,v_1,v_2,v_k>\quad k < r\quad(2)\\ <u>\quad(3) \end{matrix}\right. ????<u,v1?,v2?,...,vr?>(1)<u,v1?,v2?,vk?>k<r(2)<u>(3)?
情况(1):
d [ v r ] ≤ d [ u ] + 1 = d [ v r + 1 ] d[v_r] \leq d[u] + 1 = d[v_{r+1}] d[vr?]d[u]+1=d[vr+1?]
d [ u ] ≤ d [ v 1 ] → d [ v r + 1 ] ≤ d [ v 1 ] + 1 d[u]\leq d[v_1]\rightarrow d[v_{r+1}]\leq d[v_1]+1 d[u]d[v1?]d[vr+1?]d[v1?]+1
情况(2):
d [ u ] ≤ d [ v 1 ] → d [ v r + 1 ] = d [ u ] + 1 ≤ d [ v 1 ] + 1 d[u] \leq d[v_1]\rightarrow d[v_{r+1}] = d[u]+1 \leq d[v_1]+1 d[u]d[v1?]d[vr+1?]=d[u]+1d[v1?]+1
d [ v k ] ≤ d [ u ] = d [ v k + 1 ] = . . . = d [ v r + 1 ] d[v_k] \leq d[u] = d[v_{k+1}] =...=d[v_{r+1}] d[vk?]d[u]=d[vk+1?]=...=d[vr+1?]
情况(3)
d [ v 1 ] = d [ v 2 ] = . . . = d [ v r + 1 ] d[v_1] = d[v_2] = ... = d[v_{r+1}] d[v1?]=d[v2?]=...=d[vr+1?]

推论 22.4 在执行BFS时,结点 V i V_i Vi?和节点 v j v_j vj?都加入到队列中,并且 v i v_i vi? v j v_j vj?前面入队,则入队时 d [ v i ] ≤ d [ v j ] d[v_i] \leq d[v_j] d[vi?]d[vj?]

易证

定理 22.5 对 ? v ∈ V , δ ( s , v ) = d [ v ] \forall v \in V,\delta(s,v) = d[v] ?vV,δ(s,v)=d[v]

证明(反证法)假设存在某些点使得 d [ ? ] > δ ( s , ? ) d[*] > \delta(s,*) d[?]>δ(s,?),设v是这些点中 δ ( s , v ) \delta(s,v) δ(s,v)最小的点,且 δ ( s , v ) ≠ ∞ \delta(s,v) \neq \infty δ(s,v)?=,否则 d [ v ] < = δ ( s , v ) d[v] <= \delta(s,v) d[v]<=δ(s,v),则存在从s到v的最短路, v ≠ s ( d [ s ] = δ ( s , s ) = 0 ) v\neq s(d[s] = \delta(s,s) = 0) v?=s(d[s]=δ(s,s)=0)
u是s到v的最短路上v之前的一点, δ ( s , v ) = δ ( s , u ) + 1 , δ ( s , u ) < δ ( s , v ) \delta(s,v) = \delta(s,u)+1,\delta(s,u) < \delta(s,v) δ(s,v)=δ(s,u)+1,δ(s,u)<δ(s,v)
因为根据对结点v的要求和定义, d [ u ] = δ [ u ] d[u] = \delta[u] d[u]=δ[u]
d [ v ] > δ ( s , v ) > d [ u ] + 1 d[v] > \delta(s,v) > d[u]+1 d[v]>δ(s,v)>d[u]+1
考虑u出对前瞬间v的颜色
{ 白 d [ v ] = d [ u ] + 1 灰 d [ v ] ≤ d [ u ] 黑 d [ v ] ≤ d [ u ] \left\{\begin{matrix} 白 d[v] = d[u] + 1 \\ 灰 d[v] \leq d[u]\\ 黑 d[v] \leq d[u] \end{matrix}\right. ????d[v]=d[u]+1d[v]d[u]d[v]d[u]?
因此假设不成立,则 ? v ∈ V , δ ( s , v ) = d [ v ] \forall v \in V,\delta(s,v) = d[v] ?vV,δ(s,v)=d[v]

时间复杂度

O(V+E)

深度优先搜索

拓扑排序

强联通分解

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-10-19 12:08:35  更:2021-10-19 12:10:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:36:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码