图论建模及其基本算法精讲.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
关键点 对于一个连通的无向图G V,E ,如果删除某个顶点v后图就变得不连通了,那么v就称之为图G的关键点。 从某个点开始深度优先遍历 DFS ,得到一棵DFS树(虚线代表逆向边) 求割点与桥(R.Tarjan算法) DFS u :u在搜索树(以下简称为树)中被遍历到的次序号。 Low u :u或u的子树中能通过非父子边追溯到的最早的节点,即DFS序号最小的节点。 显然有, Low u Min DFS u , DFS v u,v 为后向边 返祖边 Low v u,v 为树枝边 父子边 割点和桥的判定 一个顶点u是割点,当且仅当满足 1 或 2 1 u为树根,且u有多于一个子树。 2 u不为树根,且满足存在 u,v 为树枝边 或称父子边,即u为v在搜索树中的父亲 ,使得DFS u Low v 。 一条无向边 u,v 是桥,当且仅当 u,v 为树枝边,且满足DFS u Low v 。 极大强连通分量 有向图G V,E 中,如果两个点A和B,从A出发有路径可以到B、并且从B出发有路径可以到A,那么就称A和B属于同一个连通分量。 对于V的一个子集V’,如果V’中任意两个点都属于同一个连通分量,则V’称之为一个强连通分量。 对于一个强连通分量V’,如果加入任意一个点v,V’∪ v 都不再是一个强连通分量,则V’就称之为一个最大强连通分量。 极大强连通分量的求法 从某一个点开始进行深度优先遍历 DFS ,维护一个栈Stack,保留当前DFS树中的节点。对于每个节点v,计算两个值: 1. DFS v ——v是第几个被遍历到的节点。 2. LOW v ——v及其子孙能访问到栈中的DFS值最小的顶点的DFS值。 如果某个节点v满足LOW v DFS v ,那么当前以为v为根的子树是一个强连通分量,把以u为根的子树从DFS树中划出去 即从Stack中删除 。 思考题:人穿柱子游戏 在一个无限长的条形路上,有n n 200 个柱子,体积不计,有一个人想从左边走到右边,人近似看成一个半径为R的圆(如下图),问能否实现? 六、最短路问题 问题描述:给加权图G SSSP:求给定起点s到其他所有点的最短路 APSP:求每两对点的最短路 算法 标号设定类:dijkstra 标号修正类:bellman-ford 动态规划类:floyd-warshall 变形与应用举例 SSSP Dijkstra算法 核心思想:按路径递增的次序产生最短路径的算法 1 找到图中最短的路径,设为(v,vj),将j设为已标号的点 2 找下一条次短的路径,假设终点为k,将k设为已标号的点,那么要么是(v,vk)要么是(v,vj,vk),若经过vj ,将j设为已检查的点,放入集合. 3 以次短路径出发找第三短的路径,类似第二步的方法. 4 按上述方法一直到所有的顶点被检查过,则从v到其他顶点的最短路径求出. Dijkstra算法 令d’ u min d[v]+w v,u |v存在 ,设 中最小的元素为i,则令 (即求出了i的最短路长度),并根据d[i]来对 进行更新。每次求出一个d值,重复n次就可以得到所有点的最短路径长度。下面是Dijkstra算法的伪代码: Proc SSSP_Dijkstra start:integer ; For i: 1 to n do d’ i : ∞; d’ start : 0; For k: 1 To n Do 【 i: GetMin Proc SSSP_Dijkstra start:integer ; For i: 1 to n do d’ i : ∞; d’ start : 0; For k: 1 To n Do 【 i: GetMin ; 取出d’中值最小的结点i d[i]: d’ i ;Delete i,d’ ; 令d[i]等于d’ i ,并将i从d’中删除 For each node u exist edge i,u 【 对每条从i连出的边进行检查 If d’ u d[i]+w i,u Then d’ u : d[i]+w i,u ;】 根据d[i]对d’ u 进行更新 】 End; Dijkstra算法 适用条件: 所有边的权值非负 定理2 每当结点u插入集合S时,有d[u] w s,u 成立。 效率: ?用一维数组来实现优先队列Q,O V2 ,适用于中等规模的稠密图 ?二叉堆来实现优先队列Q,O E+V logV ,适用于稀疏图 ?用Fibonacci堆来实现优先队列Q的话,O VlogV ,可惜编程复杂度过高,理论价值远大于实用价值 思考题:最优乘车 一名旅客最近到H城旅游,他很想去S公园游玩

文档评论(0)

ccx55855 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档