




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第二讲 算法和算法分析第一章绪论1、理解重点词语。4有感情地朗读课文。 教学重点: 教学难点: 授课内容5.6 有向无环图及其应用5.6.1 拓扑排序有向无环图可以用来描述一项工程或任务的进行过程。 在工程实践中,一个工程项目往往由若干个子项目组成,这些子项目间往往有多种关系:先后关系,即必须在一子项目完成后,才能开始实施另一个子项目;子项目之间无次序要求,即两个子项目可以同时进行,互不影响。实际问题: 一个表示偏序的有向图可用来表示一个流程图。它或者是一个施工流程图,或者是一个产品生产的流程图,再或是一个数据流图(每个顶点表示一个过程)。图中每一条有向边表示两个子工程之间的次序关系(领先关系)。在工厂中,一件设备的生产包括许多工序,各工序之间也存在这两种关系。学校里某个专业的课程学习,有些课程是基础课,它们可以独立于其它课程,即无前导课程;有些课程必须在一些课程学完后才能开始学。 这些类似的问题都可以用有向图来表示,我们把这些子项目、工序、课程看成一个个顶点称之为活动(Activity)。如果从顶点Vi到Vj之间存在有向边,则表示活动i必须先于活动j进行。这种图称做顶点表示活动的网络(Activity On Vertex network,简称AOV网络)。例如,一个软件专业的学生必须学习一系列基本课程(如图7.26所示),其中有些课程是基础课,它独立于其它课程,如高等数学;而另一些课程必须在学完作为它的基础的先修课程才能开始。如在程序设计基础和离散数学学完之前就不能开始学习数据结构。这些先决条件定义了课程之间的领先(优先)关系。这个关系可以用有向图更清楚地表示,如图7.27所示。图中顶点表示课程,有向边(弧)表示先决条件。若课程i是课程j的先决条件,则图中有弧 。建立模型: 这种用顶点表示活动,用弧表示活动间的优先关系的有向图称为顶点表示活动的网 (Activity On Vertex Network),简称AOV-网。在网中,若从顶点i到顶点j有一条有向路径,则i是j的前驱;j是i的后继。若是网中一条弧,则i是j的直接前驱;j是i的直接后继。注意:在AOV-网中不应该出现有向环,因为存在环意味着某项活动应以自己为先决条件。若设计出这样的流程图,工程便无法进行。而对程序的数据流图来说,则表明存在一个死循环。因此,对给定的AOV-网应首先判定网中是否存在环。检测的办法是对有向图构造其顶点的拓扑有序序列,若网中所有顶点都在它的拓扑有序序列中,则该AOV-网中必定不存在环。 【例如】表5-6-1是某校计算机专业的课程及其相互之间的关系,它对应的AOV网络如图5-6-1所示。表5-6-1 某专业课程设置图5-6-1(a) AOV网络 在AOV网络中,如果顶点Vi的活动必须在顶点Vj的活动以前进行,则称Vi为Vj的前趋顶点,而称Vj为Vi的后继顶点。这种前趋后继关系有传递性。AOV网络中一定不能有有向环路。例如在图5-6-1(b)那样的有向环路中,V2是V3的前趋顶点,V1是V2的前趋顶点,V3又是V1的前趋顶点,环路表示顶点之间的先后关系进入了死循环。因此,对给定的AOV网络首先要判定网络中是否存在环路,只有有向无环路网络在应用中才有实际意义。所谓“拓扑排序”就是将AOV网络中的各个顶点(各个活动)排列成一个线性有序序列,使得所有要求的前趋、后继关系都能得到满足。由于AOV网络中有些顶点之间没有次序要求,它们在拓扑有序序列中的位置可以任意颠倒,所以拓扑排序的结果一般并不是唯一的。通过拓扑排序还可以判断出此AOV网络是否包含有有向环路,若有向图G所有顶点都在拓扑排序序列中,则AOV网络必定不包含有有向环路。如何进行拓扑排序? 解决方案:解决的方法很简单: 拓扑排序方法(1) 在AOV网中选择一个没有前驱(即入度为0)的顶点,并把它输出;(2) 从网络中删去该顶点和从该顶点发出的所有有向边;(3) 重复执行上述两步,直到网中所有的顶点都被输出 (此时,原AOV网络中的所有顶点和边就都被删除掉了)。如果进行到某一步,无法找到无前趋的顶点,则说明此AOV网络中存在有向环路,遇到这种情况,拓扑排序就无法进行了。(a) (b) (c) (d) (e) (f)图5-6-2 AOV网及拓扑序列的产生过程其中:(a)AOV网;(b)输出v0后;(c)输出v5后;(d)输出v3后;(e)输出v2后;(f)输出v1后。这样得到的一个拓扑排序序列为:v0, v5, v3, v2, v1, v4如何在计算机中实现?为了实现拓扑排序,针对上述两个步骤,采用邻接表作为有向图的存储结构,并且在表结点中增设一个入度,存放顶点的入度。例如图5-6-2种的AOV网的邻接表如图5-6-3(a)所示。这样,入度域为零的表结点及时无前驱的顶点,删除该顶点及它为尾的弧的操作,则可以转换为将它的所有弧头顶点的入度减1来实现 。 (a) 图5-6-2(a)的邻接链表图5-6-3 AOV网的邻接表示为了避免在每一次选入度为零的顶点时重复扫描表头数组中的入度与作为链栈域,存放下一个入度为零的顶点,-1表示栈底,栈顶指针为top,寄生在表头数组的入度域中的入度为零的顶点栈链的初始状态如图5-6-3(b)所示。此时栈顶指针top=5指出v5的入度为零,v5的入度域为0表示下一个入度为零的顶点是v0,v0的入度为-1表示v0是栈底。这样,拓扑排序算法可以形式地描述如下:(1)扫描顶点表,将入度为零的顶点入栈;(2)while (栈非空) 将栈顶vj探出并输出之; 在邻接表中查vj的直接后继vk,把vk 的入度减1,若vk的入度为零则进栈; (3)若输出的顶点数小于n,则表示则有回路;否则拓扑排序正常结束。算法5.10/* AOV网的邻接表表示 */typedef struct arcnodeint adjvex;struct arcnode * nextarc;Arcnode;typedef struct vnodeVextype data;Int indegree; /* 入度域 */Arcnode * firstarc;vnode;5.5.2 关键路径 与AOV-网相对应的是AOE-网(Activity On Edge)即边表示活动的网。AOE-网是一个带权的有向无环图,其中,顶点表示事件(Event),弧表示活动,权表示活动持续的时间。通常,AOE-网可用来估算工程的完成时间。实际问题: 例如 图5-6-4是一个假想的有11项活动的AOE-网。其中有9个事件v1,v2,v3,v9,每个事件表示在它之前的活动已经完成,在它之后的活动可以开始。如v1表示整个工程开始,v9表示整个工程结束,v5表示a4和a5已经完成,a7和a8可以开始。与每个活动相联系的数是执行该活动所需的时间。比如,活动a1需要6天,a2需要4天等。 图5-6-4 一个AOE-网 和AOV-网不同,对AOE-网有待研究的问题是:(1)完成整项工程至少需要多少时间?(2)哪些活动是影响工程进度的关键? 由于在AOE-网中有些活动可以并行地进行,所以完成工程的最短时间是从开始点到完成点的最长路径的长度(这里所说的路径长度是指路径上各活动持续时间之和,不是路径上弧的数目)。路径长度最长的路径叫做关键路径(Critical Path)。假设开始点是v1,从v1到vi的最长路径长度叫做事件vi的最早发生时间。这个时间决定了所有以vi为尾的弧所表示的活动的最早开始时间。我们用e(i)表示活动ai的最早开始时间。还可以定义一个活动的最迟开始时间l(i),这是在不推迟整个工程完成的前提下,活动ai最迟必须开始进行的时间。两者之差l(i)-e(i)意味着完成活动ai的时间余量。我们把l(i)=e(i)的活动叫做关键活动。显然,关键路径上的所有活动都是关键活动,因此提前完成非关键活动并不能加快工程的进度。因此,分析关键路径的目的是辨别哪些是关键活动,以便争取提高关键活动的工效,缩短整个工期。在描述关键路径的算法时,设活动ai由弧表示,要确定如下几个相关的量:(1) 事件Vj的最早出现时间和活动的最早开始时间:从源点V1到某顶点Vj的最长路径长度叫作事件j的最早出现时间,表示成evj。顶点Vj的最早出现时间evj决定了从Vj指出的各条边所代表活动的最早开始时间,因为事件j不出现,它后面的各项活动就不能开始。我们以ei表示活动ai的最早开始时间。显然ei= evj 。(2) 活动ai的最迟开始时间:在不影响整个工程按时完成的前提下,此项活动最迟的必须开始时间,表示成Li。只要某活动ai有Li=ei的关系,我们就称ai为关键活动。关键活动只允许在一个确定的时间开始,再早,它前面的事件还没出现,尚不能开始;再晚,又会延误整个工程的按时完成。由于完成整个工程所需的时间是由关键路径上各边权值之和所决定的,显然关键路径上各条边所对应的活动都是关键活动。 (3) 事件j的最迟出现时间:即事件j在不延误整个工程的前提下允许发生的最迟时间,表示为Lvj。对某条指向顶点Vj的边所代表的活动ai可得到: Li= Lvj-(活动ai所需时间) 也就是活动ai必须先于它后面事件的最迟出现时间开始,提前的时间为进行此活动所需的时间。 图5-6-5所示为活动开始时间与事件出现时间的关系。图5-6-5 活动开始时间与事件出现时间的关系 确定关键路径的方法就是要确定ei=Li的关键活动。假设以wj,k表示有向边的权,即此边对应的活动所需的时间,为了求AOE网络中活动ai的最早开始时间ei和活动ai的最迟开始时间Li,先要求得顶点Vk的事件Vk的最早出现时间evk和最迟出现时间Lvk 。 evk和Lvk可以采用下面的递推公式计算: (1) 向汇点递推 由源点的ev1=0开始,利用公式: 向汇点的方向递推,可逐个求出各顶点的ev 。式中p表示所有指向顶点的边的集合,如图5-6-6所示。 图5-6-6 集合p此式的意义为:从指向顶点Vk的各边的活动中取最晚完成的一个活动的完成时间作为Vk的最早出现时间evk。 (2) 向源点递推 由上一步的递推,最后总可求出汇点的最早出现时间evn。因汇点就是结束点,最迟出现时间与最早出现时间相同,即Lvn=evn。从汇点的最迟出现时间Lvn开始,利用下面公式:向源点的方向往回递推,可逐个求出各顶点的最迟出现时间Lv。式中s表示所有由Vj点指出的边的集合,如图5.6-7所示。 此公式的意义为:由从Vj顶点指出的各边所代表的活动中取需最早开始的一个开始时间作为Vj的最迟出现时间。 无论是向汇点递推还是向源点递推,都必须按一定的顶点顺序进行。对所有的有向边,向汇点递推是先求出尾顶点的ev值,再求头顶点的ev值;向源点递推则相反,先求头顶点的Lv值,再求尾顶点的Lv值。 为此,可利用上节介绍的拓扑排序得到的顶点次序进行向汇点的递推,向源点的递推按相反的顺序进行即可,不必再重新排序。 求关键路径的算法:(1)输入e条弧,建立AOE-网的存储结构; (2)从源点v0出发,令ve0=0,按拓扑有序求其余各顶点的最早发生时间vei (1in-1)。如果得到的拓扑有序序列中顶点个数小于网中顶点数n,则说明网中存在环,不能求关键路径,算法终止;否则执行步骤(3)。(3)从汇点vn出发,令vln-1=ven-1,按逆拓扑有序求其余各顶点的最迟发生时间vli(n-2i0);(4)根据各顶点的ve和vl值,求每条弧s的最早开始时间e(s)和最迟开始时间 l(s)。若某条弧满足条件e(s)=l(s),则为关键活动。 对图5-6-1例子中的AOE网络,各事件的最早出现时间和最迟出现时间及各活动的最早开始时间和最迟开始时间计算结果如表5.1所示。 表5-1 AOE网络中的关键活动由表5-1可知时间余量为零的活动都是关键活动,即为a1,a4,a7,a8,a10,a11。这些关键活动构成两条关键路径,即关键路径(V1,V2,V5,V7,V9)和(V1,V2,V5,V8,V9)。在安排工程时,对于关键活动和余量小的活动应重点保证,余量较大的活动可适当地放松些,对非关键活动加速进行,并不能使整个工程提前完成,只有提高关键路径上的活动的效率,才能缩短整个工程的工期。例5.1已知一有向图的邻接表存储结构如图5-6-8所示,分别给出从顶点v1出发进行深度优先和广度优先遍历所得到的顶点序列。图5-6-8 一个有向图的邻接表【解答:】根据有向图的深度优先遍历算法,从顶点v1出发所得到的顶点序列是: v1,v3,v4,v5,v2 根据有向图的广度优先遍历算法,从顶点v1出发所得到的顶点序列是: v1,v3,v2,v4,v5例5.2有n个顶点的无向图或有向图采用邻接矩阵和邻接表表示,请回答下列问题: (1) 如何计算图中有多少条边?(2) 如何判断任意两个顶点i和j是否有边相连?(3) 如何计算任意一个顶点的度是多少?【解答】解:(1) 对于无向图邻接矩阵中“1”的个数除2为图的边数。邻接表中的各单链表中的结点数除2为图的边数。对于有向图邻接矩阵中“1”的个数为图的边数。邻接表中的各单链表中的结点数为图的边数。(2) 对于无向图,在邻接矩阵中第i行第j列元
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年天津市河东区中考二模物理试题(解析版)
- 小学6年级毕业考试试卷及答案
- 初一期末考试试卷及答案
- 蒸馏法课件教学课件
- 2025年北京高考物理试题+答案
- 2025年高考历史试题分类汇编:中国古代史(先秦-魏晋)选择题解析版
- 2025年辽宁省中式面点师(初级)证考试题库
- 橡胶船物理题目及答案
- 乡村幼师答辩题目及答案
- 2025采购合同样式范文
- 四上科学第一单元《多样的动物》知识梳理
- 三字经全文带拼音打印版带翻译
- 微观经济学-范里安varian中级
- 山东省青岛市各县区乡镇行政村村庄村名居民村民委员会明细及行政区划代码
- 《印章移交登记表》
- 电缆护套感应电压计算
- 四年级上册心理健康教育课件-健康的情绪表达 全国通用(共16张PPT)
- 第5章金属在自然环境中的腐蚀ppt课件
- 个文言实词练习(学生版)
- 集成电路版图设计(适合微电子专业)
- 安全工程燃烧学课件第一章燃烧与爆炸的化学基础
评论
0/150
提交评论