- 1、本文档共35页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Ch4有向图
高文宇
gwyy@163.com
有向图
Directed Graph
有向图中边是单向的,无向图可以看作是有向图的特例。
但有向图中边的单向性对算法有着深刻的影响,是的有向图和无向图的处理有着很大的不同。
有向图的术语
Digraph
有向图的API
Digraph API
Digraph类
Digraph
有向图的DFS
DirectedDFS
有向图环检测
基于DFS来解决环检测并不困难,因为由系统维护的递归调用堆栈表示的正是“当前”正在遍历的有向路径。一旦遇到一条边v?w,且w已经存在与堆栈中,就找到一个环。
有向图环检测的API
DirectedCycle
DirectedCycle类
DirectedCycle
深度优先遍历顺序
前序:在递归调用之前将顶点加入队列。
后序:在递归调用之后将顶点加入队列。
逆后序:在递归调用之后将顶点压入堆栈。
DepthFirstOrder类
DepthFirstOrder类
DepthFirstOrder类
DepthFirstOrder
拓扑排序
拓扑排序
命题F:一个DAG图的拓扑排序即为所有顶点的逆后序排列。
拓扑排序
Topological
Topological类
Topological
强连通分量
强连通定义:节点 v 和 w 是强连通的意味着从 v 到 w ,以及从 w 到 v都存在一条可达的路径。
强连通性是一种等价关系,满足如下条件:
(1)v 与 v 本身是强连通的。
(2)若v 与 w 是强连通的,则 w 与 v 也是强连通的。
(3)若 v 与 w 是强连通的,且 w 与 x也是强连通的,这 v 与 x 也是强连通的。
强连通分量定义:A strong component is a maximal subset of strongly-connected vertices.
强连通分量
SCC API
求解强连通分量
理论上可行的算法:
使用DFS,找出某个点u能到达的所有点v1,v2,…,vk;则包含u的连通分量最大就由u,v1,…,vk组成。
验证v1,v2,…,vk到u是否可达,v1,v2,…,vk中可到达u的点一定与u同属一个连通分量。
这样就确定了包含u的一个连通分量。
Kosarajus algorithm: intuition
反向图。图 G 中的强连通分量和反向图 GR.中的强连通分量是一样的。
Kernel DAG. Contract each strong component into a single vertex.
Idea.
? Compute topological order (reverse postorder) in kernel DAG.
? Run DFS, considering vertices in reverse topological order.
Kosarajus algorithm
(1)在给定的有向图G中,使用DepthFirstOrder计算它的反向图GR的逆后序排列。
(2)在G中进行DFS,但要按照刚才计算得到的顺序来访问所有未被标记的顶点。
(3)在同一个dfs递归调用中被访问的顶点都在同一个强连通分量中。
Kosaraju’s algorithm is an extreme example of a method that is easy to code but difficult to understand. Despite its mysterious nature,…
Kosaraju
Kosaraju算法
Kosaraju算法的正确性
证明:
(1)与s强连通的每一个点v都会在dfs(G,s)中被访问到。
(2)在dfs(G,s)调用中被访问到的每一个点v与s都是强连通的。
(2)在dfs(G,s)调用中被访问到的每一个点v与s都是强连通的。
(a)在dfs(G,s)中访问到v,说明从s到v存在一条路径。
(b)那么只需再说明从v到s也存在一条路径。这等价于在GR中存在一条从s到v的路径。
(c)问题的关键在于:在GR的逆后序构造过程中暗示了dfs(G,v)的结束一定是在dfs(G,s)的结束之前。而这又可以分为两种情况:
(c1)dfs(G,v)的结束在dfs(G,s)的开始之前;
(c2)dfs(G,v)的结束在dfs(G,s)的开始之后。
其中(c1)是不可能的,因为在GR中存在v到s的路径,因此调用dfs(G,v)时一定会访问到s,即在dfs(G,v)结束之前一定会调用dfs(G,s)。
而(c2)则表明在GR中存在一条从s到v的路径。
Kosaraju
Kosaraju
Kosaraju算法性能分析
Proposition I. Kosaraju’s al
您可能关注的文档
最近下载
- 材料加工工艺第三章焊接技术.ppt VIP
- 国家出资企业产权登记管理信息系统(单机版).pdf VIP
- DB42T 1761-2021 湖北省机制砂应用技术规范.pptx VIP
- 大学材料加工工程《金属构件焊接的工艺设计》课件.ppt VIP
- UL 2743-2023 便携式电源组 中文版.pdf
- 2025至2030年中国海马养殖与海马产品深加工市场发展规模及未来趋势预测报告.docx
- 药品经营管理与仓储养护知识测试试卷.docx
- 行业报告-潜在性固化剂行业调研及趋势分析.docx VIP
- 项目融资计划书(完整版).pptx
- 江西省建筑与装饰、通用安装、市政工程费用定额(2017).pdf VIP
文档评论(0)