7.5图的拓扑排序

  • 无环的有向图称为有向无环图,简称DAG图(Directed Acyclic Graph),它可以表示一个工程或系统流程图。
  • 一项大工程可以分为若干个称为活动的子工程,用顶点表示;某些子工程必须在另一些子工程完成之后才能开始,用弧表示他们之间的前驱后继关系;这样构成的有向图显然无环的。
  • 归结为拓扑排序和关键路径问题。
  • 假设以有向图表示一个工程的施工图或程序的数据流图,每个顶点代表一个活动,弧<vi,vj>表示活动i必须先于活动j进行,称为AOV-网(Activity On Vertex),图中不允许出现回路
  • 检查有向图是否存在回路的方法之一,是对有向图进行拓扑排序。
  • AOV网中顶点序列v1,v2…vn称为一个拓扑序列,当且仅当该顶点序列满足下列条件:若<vi,vj>是图中的弧,则在序列中顶点vi必须拍在顶点vj之前
  • 在一个有向图中,将图中顶点排成一个线性序列,对于有向图中没有限定次序关系的顶点,则可以人为加上任意的次序关系
  • 找一个拓扑序列的过程称为拓扑排序
  • 拓扑排序(Topological Sort):由某个集合上的一个偏序得到该集合上的一个全序,这个操作称为拓扑排序

拓扑排序步骤如下

  1. 从AOV网中选择一个没有前驱(即入度为0)的顶点并且输出它。
  2. 从AOV网中删去该顶点,并且删去从该顶点出发出的全部有向边。
  3. 重复上述两步,直到剩余的网中不再存放在没有前驱的顶点为止。

对任一有向图进行拓扑排序有两种结果

  • 图中全部顶点都包含在拓扑序列中,这说明该图不存在有向回路
  • 图中部分顶点未包含在拓扑序列中,这说明该图存在有向回路

7.5.2 AOX网与关键路径

  • 用带权有向图(DAG)描述工程的预计进度,以顶点表示事件,有向边表示活动,边弧上的权值w(ai)表示完成活动ai所需要的时间(比如天数),或者说活动ai持续时间
  • 图中入度为0的顶点表示工程的开始事件;称为源点,出度为0表示工程结束事件称为汇点。则称这样的有向图为AOE网
  • 整个工程完成时间为:从有向图的源点到汇点的最长路径具有最大长度的路径教关键路径
  • “关键活动”指的是:该边上的权值增加将使有向图上的最长路径的长度增加
  • (在AOE网中可以不止一条的关键路径)

事件的最早开始和最迟开始时间

  1. **事件v的最早开始时间:**规定源点事件的最早开始时间为0。定义图中任意一事件v的最早开始时间(early)**ve(v)**等于x,y,z到v所有路径长度的最大值,即:它是从源点v0到顶点v的最长路径长度。
ve(v)=0 		当v为源点时  **从左向右推进计算**
ve(v)=MAX{ve(x)+a,ve(y)+b,ve(z)+c}
  1. 事件v的最迟开始时间:定义保证汇点vn-1在ve(n-1)时刻完成的前提下,事件v的允许的最迟开始时间,记作vl(v)。vl(v).vl(v)的求解应从vl(n-1)=ve(n-1)开始,反向递推
vl(v)=ve(v)		当v为汇点时  **从右向左推进计算**
vl(v)=MIN{vl(x)-a,vl(y)-b,vl(z)-c}否则

活动的最早开始时间和最迟开始时间

  1. 活动ai的最早开始时间e(i):指该活动起点x事件的最早开始时间,即:
    e(i)=ve(x)

  2. 活动ai的最迟开始时间l(i):指该活动终点y事件的最迟开始时间与活动所需时间之差,即:

    l(i)=vl(y)-dut<x,y>

  3. 关键活动:对于每个活动ai,求出:
    d(i)=l(i)-e(i)
    若d(i)为0,则称为活动ai为关键活动。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值