数据结构与算法(十五)图的拓扑排序&关键路径

有向无环图:无环的有向图DAG(可能有多个前驱,但是不存在回路)

        用于解决:需要排序且各个事件之间存在先后关系的问题

 

 

 

       

         A0V网(顶点表示活动网):用顶点表示活动弧表示活动间的优先制约关系

                用于拓扑排序

                拓扑排序:将全部活动排列成一个线性序列,使得AOV网中有弧<i,j>存在,i一定排在j的前面,具有这种性质的线性序列称为拓扑有序排序,相应的拓扑有序排序的算法被称为拓扑排序

                方法:        ①找到一个没有前驱的顶点输出

                                   ②删除该顶点和以其为弧尾的弧

                                   ③重复①-②,直到图中不存在没有前驱的顶点

                                       拓扑序列为C1,C2,C3,C4,C5,C7,C9,C10,C11,C6,C12,C8

                                    一个AOV网的拓扑序列不是唯一的

                 重要应用:检测是否存在环

                        若存在环,会存在顶点不在其拓扑有序序列中(最终找不到没有前驱的顶点

        AOE网(边表示活动网):弧表示活动顶点表示活动的开始或结束事件

                用于关键路径(最短(至少花费)时间,最耗时的环节--路径长度最长的路径)

                 一个点即可以表示开始又可以表示结束(一项活动的结束是另一项活动的开始)

                工程开始(源点:入度为0)        工程结束(汇点:出度为0)

                 求解关键路径:

                        描述量:         ve(vj)--事件vj最早发生时间

                                                        ve(v1)=0        ve(v2)=30

                                                vl(vj)--事件vj最迟发生时间

                                                         vl(v4)=165

                                                e(i)--活动ai的最早开始时间

                                                        e(a3)=30

                                                l(i)--ai最迟开始时间

                                                        l(a3)=120

                                                l(i)-e(i)--活动ai的时间余量

                                                关键活动--时间余量为0,关键路径由若干个关键活动构成

                        如何找到关键活动

                                设活动ai用弧<j,k>表示,持续时间记为wj,k

                                则有        e(i)=ve(j)

                                                l(i)=vl(k)-wj,k

                                如何求ve(j)和vl(j)        次环节中的最长时间和最短时间

                                                ①从ve(1)=0开始往前递推

                                                        ve(j)=Max{ ve(i)+wi,j } ,<i,j>∈T,2≤j≤n

                                                        其中T为所有以 j 为头的弧的集合

                                                ②从vl(n)=ve(n)开始向后递推

                                                        vl(i)=Min{ vl(j)-wi,j },<i,j>∈S,1≤i≤n-1

                                                        S为所有以 i 为尾的弧的集合                

 Ve(Vj)=3、5、12、88        Max值为88

        Vl(Vj)=10-2、10-4、10-3、10-7        Min值为3 

 

                                实例中的关键活动如下

                                 由a1、a4、a7、a8、a10、a11构成的路径便是关键路径

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值