图论的割顶、桥和强连通分量教材.ppt

  1. 1、本文档共69页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * 参考文献 王树禾《离散数学引论》 刘汝佳/黄亮《算法艺术与信息学竞赛》 吴文虎/王建德《图论的算法与程序设计》 * * MST另类算法证明 我们通过kruskal算法的正确性来证明该算法的正确性 设该算法得到的MST’为T’,它不是原图的最小生成树T,则存在一条边e,有e∈T’且e∈T。由于T’不可再调整,所以在T’中添加e之后,e是所成环上的最大边。因而在做kruskal算法时候,该环上的所有边在e之前都会被事先考虑是否加入MST中,而在考虑是否加入e这条边的时候,该环上的所有点都已经连通了,所以e一定不会被加入MST中。推出矛盾。 * * 最小环改进算法的证明 一个环中的最大结点为k(编号最大),与他相连的两个点为i,j,这个环的最短长度为g[i][k]+g[k][j]+i到j的路径中,所有结点编号都小于k的最短路径长度 根据floyd的原理,在最外层循环做了k-1次之后,dist[i][j]则代表了i到j的路径中,所有结点编号都小于k的最短路径 综上所述,该算法一定能找到图中最小环 * * 定理1的证明 设dfn[a]dfn[b],在DFS的活动中心,即算法中的v,只沿父子边移动。若a不是b的祖先,但由dfn[a]dfn[b]可知,a比b先“生”,即活动中心移至b之前,已从a移到a的某个前辈。然而,由算法可知,仅当与a关联的边皆被用过后才倒行至其父,这说明e已被用过,b在a之前已被发现,应有dfn[b]dfn[a]。矛盾。顾a是b的祖先。 同理可得当dfn[b]dfn[a]的时候,b是a的祖先 * * 定理2的证明 令S是从根r到u的轨上含r不含u的一切点组成的集合,T是以v为根的子树上的点集。由定理1,不存在连接T与V-(S∪{u}∪T)的边。若存在连接t∈T与s∈S的边ts,则它是返祖边,且dfn[s]dfn[u]。这时lowlink[v] ≤ dfn[s] ≤ dfn[u],与已知lowlink[v] ≥ dfn[u]矛盾,故ts这种边不存在,故u是割顶,证毕。 * * 定理3的证明 充分性: 若r是G的DFS的生成树的根,且r是G的割顶,V1,V2,…,Vm是V-{r}的一个划分,G[Vi]是G-r的连通片,i=1,2,…,m。i≠j时,Vi与Vj之间的轨都含r,这时没有起于边rv(v∈Vi)而止于Vj中顶的树上的有向轨,故至少有两条以r为尾的父子边。 必要性: 设rv1,rv2是两条父子边,T是根在v1的子树,由定理1,无连接V(T)与V(G)-(V(T)∪{r})之顶的边,又V(G)-V(T)∪{r}≠⊙,故r是G的割顶,证毕。 * * 求强连通子图算法2的证明 考虑G中属于同一个强连通分支的两个顶点x和y。因为G中x和y可以互达,所以Gr中x和y也可以互达。x和y一定在W2中的同一棵树上。 考虑W2种顶点Root为根的同一棵树上的两个顶点x和y。图Gr中从Root到x有一条路,因而图G中从x到Root有一条路,所以Root要么是x的祖先,要么是先于x遍历完毕的旁系亲戚。又由于dfn[Root]dfn[x],所以Root不可能是先于x遍历完毕的旁系亲戚,而只可能是x的祖先,所以图G中存在从Root到x的一条路,所以x、Root是可以互达的顶点。x和Root可互达,同理y和Root也互达,所以x和y亦互达。 综上所述,当且仅当x和y是W2中同一棵树上的顶点时,x和y互达。W2中的每棵树构成了一个有向图的极大强连通子图 * 图论割、桥和强连通分量 * * * 新修公路(3) 如图所示,点代表了原图中的一个块,它们之间的连边是割边。连接a与c,b与d之后,图中就没有割边了。 a b c d * * 新修公路(4) 但并不是任意连接两个叶子结点就可以达到目标。假如连接了a与b,c与d,原图并没有变成一个块。 a b c d * * 新修公路(5) 进一步分析刚才的算法,每次连接两个叶子结点之后,把新生成的圈压缩成为一个点,以前和圈上的点关联的点,都和新生成的这个“压缩点”相关联。于是原来的树在添加一条边之后,又变回了一棵树。 * * 新修公路(6) 在连接a与c之后,新生成的树只剩下2个叶子结点;连接b与d之后,树就被压缩成了一个点。 a b c d b d * * 新修公路(7) 而如果先连接a与b,那么新生成的树会剩下3个叶子结点,连接c与d之后,树中还剩2个叶子结点,所以这种连接方法还需要多连一条边。 现在的问题是,是否一定能找出这样子的两个叶子结点,使得压缩成的点不会成为新的叶子节点呢? * * 新修公路(8) 连接的两个点的那条树中的唯一路径上,如果除了它们的最近公共祖先到自己的父亲有连边以外,其他的结点没有别的分叉,那么连接这两个点之后缩圈得到的点将会是一个叶子结点。 假设图中的任意两个叶子连接之

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档