版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
G=(V,E)是一个有n个顶点的有向图,V中全部顶点构成的序列v1,v2,…,vn称为一个拓扑序列,当且仅当对于图中每一条边<vi,vj>,vi必须排在vj之前。1、什么是拓扑排序在一个有向图中找一个拓扑序列的过程称为拓扑排序。
8.6拓扑排序拓扑序列中顶点vi必须排在顶点vj之前:…vi…vj
…。vivj可以推出vivj有路径拓扑序列中顶点vi必须排在顶点vj之前:…vi…vj
…。1/298.6拓扑排序课程代号课程名称先修课程C1高等数学无C2程序设计无C3离散数学C1C4数据结构C2,C3C5编译原理C2,C4C6操作系统C4,C7C7计算机组成原理C2
例如,计算机专业的学生必须完成一系列规定的基础课和专业课才能毕业,假设这些课程的名称与相应代号有如下关系:2/298.6拓扑排序课程之间的先后关系可用有向图表示:拓扑序列:C1—C3—C2—C4—C7—C6—C5C2—C7—C1—C3—C4—C5—C6第1学期第2学期C1C3C4C2C7C6C53/298.6拓扑排序课程代号课程名称先修课程C1高等数学无C2程序设计无C3离散数学C1C4数据结构C2,C3C5编译原理C2,C4C6操作系统C4,C7C7计算机组成原理C2(1)从有向图中选择一个没有前驱(即入度为0)的顶点并且输出它。(2)从图中删去该顶点,并且删去从该顶点发出的全部有向边。(3)重复上述两步,直到剩余的图中不再存在没有前驱的顶点为止。2、拓扑排序步骤4/298.6拓扑排序拓扑排序演示产生一个拓扑序列:C1C3C2C7C4C6C5排序完成C1C3C4C2C7C6C55/298.6拓扑排序一个有向图拓扑排序的结果:产生的拓扑序列包含全部的顶点产生的拓扑序列不包含全部的顶点
该图能够进行拓扑排序
该图不能进行拓扑排序图中存在回路6/298.6拓扑排序对如图所示的图进行拓扑排序,可以得到不同的拓扑序列个数是()。A.4 B.3 C.2 D.1eabcd注:2010年全国考研题不同的拓扑序列有:aebcd、abced、abecd。答案为B。解7/298.6拓扑排序
若一个有向图中的顶点不能排成一个拓扑序列,则可断定该有向图
()。A.是个有根有向图B.是个强连通图C.含有多个入度为0的顶点D.含有顶点数目大于1的强连通分量图中存在回路,回路中的所有顶点之间都有路径,构成一个强连通分量或者强连通分量的一部分。答案为D解8/298.6拓扑排序3、拓扑排序算法设计如何标志没有前驱(即入度为0)的顶点如何删除一个顶点及其从该顶点发出的全部有向边多个没有前驱(即入度为0)顶点的处理顺序算法设计需要解决的问题通过顶点入度数组indegree来实现用栈保存这些入度为0的顶点9/298.6拓扑排序1203一个有向网(用indegree模拟删除出边的过程)indegree[0]=0indegree[1]=1indegree[2]=2indegree[3]=1123拓扑序列:0indegree[0]=0indegree[1]=1-1=0indegree[2]=2-1=1indegree[3]=1-1=023拓扑序列:0,1indegree[0]=0indegree[1]=0indegree[2]=1-1=0indegree[3]=0以此类推10/298.6拓扑排序voidTopSort(AdjGraph*G) //拓扑排序算法{SqStack*st; //定义一个栈(元素为int类型)InitStack(st); //初始化intindegree[MAXV]; //定义一个入度数组for(inti=0;i<G->n;i++)indegree[i]=0;for(inti=0;i<G->n;i++) //求所有顶点的入度{ArcNode*p=G->adjlist[i].firstarc;while(p!=NULL){intw=p->adjvex; //找到顶点i的邻接点windegree[w]++; //有边<i,w>,顶点w的入度增1p=p->nextarc;}}拓扑排序算法如下:11/298.6拓扑排序for(inti=0;i<G->n;i++) //将入度为0的顶点进栈if(indegree[i]==0) Push(st,i);inti;while(!StackEmpty(st)) //栈不空循环{Pop(st,i); //出栈一个顶点iprintf("%d",i); //输出该顶点ArcNode*p=G->adjlist[i].firstarc; while(p!=NULL) //将顶点i的出边邻接点的入度减1{intw=p->adjvex; //存在边<i,w>indegree[w]--; //顶点w的入度减1if(indegree[w]==0) //将入度为0的邻接点w进栈 Push(st,w);p=p->nextarc; //找下一个邻接点}}}产生一个拓扑序列,时间复杂度为O(n+e)。12/29上述拓扑排序算法中,栈st的作用是保存当前所有入度为0的顶点,先输出其中任意哪个顶点不影响拓扑排序的正确性。所以可以用队列替代栈。13/298.6拓扑排序用一个带权有向图(DAG)描述工程的预计进度。顶点表示事件,有向边表示活动,边e的权c(e)表示完成活动e所需的时间(比如天数)。图中入度为0的顶点表示工程的开始事件(如开工仪式),出度为0的顶点表示工程结束事件。8.7.1相关概念AOE网(ActivityOnEdge)8.7AOE网与关键路径14/298.7AOE网与关键路径从AOE网中源点到汇点的最长路径,具有最大长度的路径叫关键路径。关键路径是由关键活动构成的,关键路径可能不唯一。15/298.7AOE网与关键路径7abcdefghk6452118244源点汇点关键路径演示一条关键路径16/298.7AOE网与关键路径关键路径为源点到汇点的最长路径。这样转变为在AOE中求从源点到汇点的最长路径问题。求一个AOE的关键路径求AOE的中的关键活动17/298.7AOE网与关键路径
(1)求事件的最早开始和最迟开始时间
事件v的最早开始时间:规定源点事件的最早开始时间为0。定义图中任一事件v的最早开始时间(eventearly)ve(v)等于x、y、z到v所有路径长度的最大值:ve(v)=0
当v为源点时ve(v)=MAX{ve(x)+a,ve(y)+b,ve(z)+c}
否则从左向右推进计算这是为什么源点要唯一!xyzvabcve(v)=?ve(x)ve(y)ve(z)8.7.2求AOE网的关键活动18/29事件v的最迟开始时间:定义在不影响整个工程进度的前提下,事件v必须发生的时间称为v的最迟开始时间(eventlate)vl(v)。其递推公式如下:vl(v)=ve(v)
当v为汇点时vl(v)=MIN{ve(x)-a,ve(y)-b,ve(z)-c}
否则vxyzabcvl(v)=?vl(x)vl(y)vl(z)从右向左推进计算这是为什么汇点要唯一!19/298.7AOE网与关键路径(2)求活动的最早开始时间(e)和最迟开始时间(l)活动a的最早开始时间e(a)指该活动起点x事件的最早开始时间,即:
e(a)=ve(x)xy活动a时间为ce(x)l(y)活动a的最迟开始时间l(a)指该活动终点y事件的最迟开始时间与该活动所需时间之差,即:
l(a)=vl(y)-c20/298.7AOE网与关键路径(3)求关键活动对于每个活动a,求出d(a)=l(a)-e(a),若d(a)为0,则称活动a为关键活动。对关键活动来说,不存在富余时间。老师布置的作业要求一个星期交,而小明恰好需要一个星期做完,那么这个作业对于小明来说就是关键活动。老师布置的作业要求一个星期交,而小英只需要3天做完,那么这个作业对于小英来说就不是关键活动,她有4天的富裕时间。
一个不存在富裕时间的活动必须赶紧完成,否则会影响整个工期21/298.7AOE网与关键路径【例8.15】ve(A)=0ve(B)=ve(A)+c(a1)=6ve(C)=ve(A)+c(a2)=4ve(D)=ve(A)+c(a3)=5ve(E)=MAX(ve(B)+c(a4),ve(C)+c(a5)}=MAX{7,5}=7先进行拓扑排序,假设拓扑序列为:ABCDEFGHI计算各事件的ve(v)如下:ABCDa4=1a1=6a2=4a3=5EHIFGa6=2a5=1a7=9a8=7a10=2a11=4a9=422/298.7AOE网与关键路径求关键活动ve(F)=ve(E)+c(a7)=16ve(G)=ve(E)+c(a8)=14ve(H)=ve(D)+c(a6)=7ve(I)=MAX{ve(F)+c(a10),ve(G)+c(a11),ve(H)+c(a9)}=MAX(18,18,11}=18ABCDa4=1a1=6a2=4a3=5EHIFGa6=2a5=1a7=9a8=7a10=2a11=4a9=423/298.7AOE网与关键路径vl(I)=ve(I)=18vl(H)=vl(I)-c(a9)=14vl(G)=vl(I)-c(a11)=14vl(F)=vl(I)-c(a10)=16拓扑序列为ABCDEFGHI,按拓扑逆序IHGFEDCBA计算各事件的vl(v)如下:ABCDa4=1a1=6a2=4a3=5EHIFGa6=2a5=1a7=9a8=7a10=2a11=4a9=424/298.7AOE网与关键路径vl(E)=MIN(vl(F)-c(a7),vl(G)-c(a8)}={7,7}=7vl(D)=vl(H)-c(a6)=12vl(C)=vl(E)-c(a5)=6vl(B)=vl(E)-c(a4)=6vl(A)=MIN(vl(B)-c(a1),vl(C)-c(a2),vl(D)-c(a3)}={0,2,7}=0ABCDa4=1a1=6a2=4a3=5EHIFGa6=2a5=1a7=9a8=7a10=2a11=4a9=425/298.7AOE网与关键路径计算各活动的e(a)、l(a)和d(a)如下:活动a1:e(a1)=ve(A)=0,l(a1)=vl(B)-6=0,d(a1)=0活动a2:e(a2)=ve(A)=0,l(a2)=vl(C)-4=2,d(a2)=2活动a3:e(a3)=ve(A)=0,l(a3)=vl(D)-5=7,d(a3)=7活动a4:e(a4)=ve(B)=6,l(a4)=vl(E)-1=6,d(a4)=0活动a5:e(a5)=ve(C)=4,l(a5)=vl(E)-1=6,d(a5)=2ABCDa4=1a1=6a2=4a3=5EHIFGa6=2a5=1a7=9a8=7a10=2a11=4a9=426/298.7AOE网与关键路径活动a6:e(a6)=ve(D)=5, l(a6)=vl(H)-2=12,
d(a6)=7活动a7:e(a7)=ve(E)=7,
l(a7)=vl(F)-9=7,
d(a7)=0活动a8:e(a8)=ve(E)=7,
l(a8)=vl(G)-7=7,
d(a8)=0活动a9:e(a9)=ve(H)=7, l(a9)=vl(G)-4=10,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心血管-肾脏-代谢综合征诊疗要点总结2026
- 2026年电网调度自动化厂站端调试检修员专项题库(附答案与解释)
- 2026年咸鱼人格测试题及答案
- 2026年动漫皮肤测试题及答案
- 2026年情景古诗测试题及答案
- 2026年疲劳等级测试题及答案
- 2026年支局长招聘测试题及答案
- 2026年短路输出测试题及答案
- 2026年iq俱乐部测试题及答案
- 流量经营精细化运营之道
- 明清时期小说课件
- 宜昌市西陵区(2025年)社区《网格员》典型题题库(含答案)
- AI在工业设计中的应用【文档课件】
- 国开2025年秋《数学思想与方法》大作业答案
- 第26课《古代诗歌五首:春望》教学课件
- 地方志编纂工作流程手册
- 儿童颜面部管理
- 中职flash考试试题及答案
- 《可转化科技成果评价规范》
- 学校教师意识形态培训
- bz-高标准农田建设项目勘察设计技术投标方案210
评论
0/150
提交评论