- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《算法艺术与信息学竞赛》
第二版
教学幻灯片—图论算法
第五讲连通性问题
(刘汝佳)
内容介绍
、有向图:SCC划分的 Kosaraju算法
有向图:SCC划分的 Tarjan和 Gabow算法
三、无向图:割顶和桥的判定
四、无向图:BCC划分
、 Kosaraju算法
sCC的概念
有向图中,U可达v不
定意味着v可达u.相互
134mx(10)89
可达则属于同一个强连
Y
通分量( Strongly
Connected component
SCC
有向图和它的转置的强
连通分量相厦
所有SCC构成一个DAG
Kosaraju算法
算法步骤
调用DFS(G),计算出每个结点的u
计算GT
调用DFS(G),在主循环中按照fu]递减的顺序
执行DFS-ⅥST,则得到的每个DFS树恰好对应
于一个SCC
运行时间:O(n+m)
算法示例:先把fu]排序成post数组,然而在
GT上DFS
po3401101
Kosaraju算法的正确性
按照f值排序以后.第二次DFS是按照ScC的拓
扑序进行(以后所指叫U和u都是第一次DFS所
己d(C)和f(C)分别表示集合∪所有元素的最早发现
时间和最晚完成时间,有如下定理
定理:对于两个SCCC和C,如果C到C有边,则
f(c)f(c)
凊况:d(C)≤d(c).考虑C中第个被发现的点x,则c
全为白色,而C到C有边,故x到C中每个点都有白色路
径这样,C和C全是X的后代,因此f(C)f(C)
情况二:d(C)d(C)由于从C不可到达C因此必须等
C全部访问完毕才能访问C.因此(C)f(C)
推论对于两个SCCC和C,如果在GT中C到C’有
边,则f(C)fC)
Kosaraju算法的正确性
首先考虑f(C)最大的强连通分量.显然,此次
DFS将访问C的所有点,问题是是否可能边
其他连通分量的点?答案是否定的,因为
根据推论,如果在GT中C到另外某个C’存在
边,一定有f(C)f(C),因此第一棵DFS恰好
包含C.由数学归纳法可知,每次从当前强连
通分量出发的边一定连到f值更大的强连通
分量,而它们是已经被遍历过的,不会在
DFS树形成多余结点
SCC图
把SCC看成点,则DFS的同时可以得到SCC
图.在第二次DFS中,每新开始一次DFS
V|S|T,即新找到一个SCC,当前编号加1
DFS-VST某个SCCC时,如果出现了指向
个已访问过的SCCC的交叉边,则在
SCC图中设置边(C,C),因为在转置图中存
在C到C的边
局限性
文档评论(0)