图_拓扑排序关键路径最短路径.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文档。上传文档
查看更多
图_拓扑排序关键路径最短路径

定义: AOV网:弧表示活动的优先顺序,顶点表示活动的网络 AOV网中,不应该出现回路 定义 AOE网:弧表示活动,顶点表示事件,权表示活动的持续事件. 特点:有源点和汇点,正常-无环 3、两点之间的 最短路径问题 求从某个源点到其余各点的最短路径 1、Dijkstra 算法思想 (1)设置两个结点的集合S和T,集合S中存放已找到最短路径的结点,集合T中存放当前还未找到最短路径的结点。 (2) 初始状态时,集合S中只包含源点,设为v0,然后不断从集合T中选择到源点v0路径长度最短的结点u加入到集合S中,集合S中每加入一个新的结点u都要修改从源点v0到集合T中剩余结点的当前最短路径长度值. (3) 集合T中各结点的新的当前最短路径长度值,为原来的最短路径长度值与从源点过结点u到达该结点的路径长度中的较小者。此过程不断重复,直到集合T中的结点全部加入到集合S中为止。 (1)采用Dijkstra算法实现 算法思想:每次以不同的结点作为源点,调用狄克斯特拉算法求出从该源点到其余结点的最短路径。需重复调用n次Dijkstra算法。 下次内容 9.1静态查找表 * * 1、 拓扑排序 1 问题: 假设以有向图表示一个工程的施工图或程序的数据流图,则图中不允许出现回路。(有向无环图) 检查有向图中是否存在回路的方法之一,是对有向图进行拓扑排序。 2 何谓“拓扑排序”? (1)按照有向图给出的次序关系,将图中顶点排成一个线性序列。 (2)对于有向图中没有限定次序关系的顶点,则可以人为加上任意的次序关系。 由此所得顶点的线性序列称之为拓扑有序序列 例如:对于下列有向图 B D A C 可求得拓扑有序序列: A B C D 或 A C B D B D A C 反之,对于下列有向图 不能求得它的拓扑有序序列。 因为图中存在一个回路 {B, C, D} 3 如何对AOV网进行拓扑排序? (1)从有向图中选取一个没有前驱 的顶点,并输出之; 重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。 (2)从有向图中删去此顶点以及所有以它为尾的弧; a b c g h d f e a b h c d g f e 在算法中需要替代定性的概念 没有前驱的顶点 ?? 入度为零的顶点 删除顶点及以它为尾的弧 ?? 弧头顶点的入度减1 为避免每次都要搜索入度为零的顶点,在算法中设置一个“栈”,以保存“入度为零”的顶点。 2、关键路径 问题: 假设以有向网表示一个施工流图,弧上的权值表示完成该项子工程所需时间。 问:哪些子工程项将影响整个工程的完成期限的。关键工程 a b c d e f g h k 6 4 5 2 1 1 8 7 2 4 4 例如: 整个工程完成的时间为:从AOE的源点到汇点的最长路径。 源点 汇点 6 1 7 4 如何求关键活动? “事件(顶点)” 的 最早发生时间 ve(j) ve(j) = 从源点到顶点j的最长路径长度; “事件(顶点)” 的 最迟发生时间 vl(k) vl(k) = 从顶点k到汇点的最长路径长度。 a b c d e f g h k 6 4 5 2 1 1 8 7 2 4 4 0 0 0 0 0 0 0 0 0 6 4 5 7 11 5 7 15 14 18 18 18 18 18 18 18 18 18 18 16 14 8 6 6 10 8 0 7 事件发生时间的计算公式: ve(源点) = 0; ve(j) = Max{ve(i) + dut(i, j)} i,j表示以j为弧头的弧 vl(汇点) = ve(汇点); vl(i) = Min{vl(j) – dut(i, k)} i,j表示以i为弧尾的弧 假设第 i 条弧为 j, k 则 对第 i 项活动言 “活动(弧)”的 最早开始时间 e(i) e(i) = ve(j); “活动(弧)”的 最迟开始时间 l(i) l (i) = vl(k) – dut(j,k); e(i)= l (i) 的活动就是关键活动 a b c d e f g h k 6 4 5 2 1 1 8 7 2 4 4 0 0 0 0 0 0 0 0 0 6 4 5 7 11 5 7 15 14 18 18 18 18 18 18 18 18 18 18 16 14 8 6 6 10 8 0 7 拓扑有序序列: a - d - f - c - b - e - h - g - k 0 6 4 5 7 7 15 14 18 18 14 16 10 7 8 6 6 0

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档