Ch4-2有向图--4导论.ppt

  1. 1、本文档共35页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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

文档评论(0)

***** + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档