有向无环图及其应用:
有向图是描述工程进行过程的有效工具,几乎所有的工程都可以分为若干个“活动”的子工程,每个活动都会持续一段时间,某些活动之间往往存在一定的约束关系,比如某些活动的开始必须在某些特定活动的结束才可以运行。
下面对于有向图我们进行拓扑排序和关键路径的讨论。
AOV网与拓扑排序:
AOV:
在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,称这样的有向图为顶点表示活动的网,简称AOV网(activity on vertex network),显然,AOV网中不能出现回路,否则意味着某项活动的开始要以自己的完成作为先决条件,这显然是不成立的。因此判断AOV网能否正常进行即判断它是否存在回路。测试AOV网是否存在回路的方法就是对AOV网进行拓扑排序。
拓扑排序:
拓扑序列:设G=(V,E)是一个有向图,V的顶点序列v0,v1,…vn-1称为一个拓扑序列当且仅当满足以下条件:若从顶点vi到vj有一条路径,则在顶点序列中vi必须存在于vj之前。
对一个有向图构造拓扑序列的过程称为拓扑排序。(不唯一)
过程:
for{
找出入度为0(没有前驱)的顶点输出;
删除(模拟删除)该点和该点引出的边;
}
AOE网与关键路径:
AOE:
在一个表示工程的带权有向图中,用顶点表示事件,用有向边表示活动,边上的权值表示活动的持续时间,称这样的有向图为边表示活动的网,简称AOE网(activity on edge network),AOE网中没有入边的顶点称为源点,没有出边的顶点称为终点。
AOE网的两个性质:
1.只有在进入某顶点的各活动都已经结束,该顶点所代表的事件才能开始发生。
2.只有某顶点所代表的事件发生后,从该顶点出发的各个活动才能开始。
由AOE网的性质知:完成整个工程所需的时间应该为始点到终点的最大路径长度(这里的最大路径长度是指该路径上的各个活动所持续的时间之和)。具有最大路径长度的路径称为关键路径(critical path),关键路径上的活动称为关键活动(critical activity),关键路径长度是整个工程所需的最短工期,也就是说,要想缩短整个工期,必须加快关键活动的进度。
由AOE网的性质引出的几组定义:
1.事件的最早发生时间ve[k]:
(ve[k]是指从源点到顶点vk的最大路径长度,这个长度决定了所有从顶点vk发出的活动可以开始的最早时间)
ve[0]=0;
ve[k]=max{ve[j]+length<vj,vk>}(<vi,vj>属于p[k])(p[k]表示所有到达vk的有向边的集合,len<vj,vk>为有向边<vi,vj>的权值)
2.事件的最迟发生时间vl[k]:
(vl[k]是指在不推迟整个工期的前提下,时间vk允许的最晚发生时间)
vl[n-1]=ve[n-1]
vl[k]=min{vl[j]-len<vk,vj>}
3.活动ai的最早开始时间ee[i]:
(活动ai的最早开始时间应等于事件vk的最早发生时间。)
ee[i]=ve[k]
4.活动ai的最晚开始时间e[i]:
(e[i]是指在不推迟整个工期的前提下么活动ai必须开始的最晚时间。)
el[i]=vl[j]-len<vi,vj>
关键活动与关键路径的确定:
根据每个活动的最早开始时间ee[i]和最晚开始时间el[i]判定活动是否为关键活动:当ee[i]=el[i]的活动就是关键活动,那些el[i]>ee[i]的活动则不是关键活动,el[i]-ee[i]的值为活动的时间余量,关键活动确定之后,关键活动所在的路径就是关键路径。
AOV{
顶点->活动;
弧/边->活动间优先关系;
}
AOE{
顶点->事件;
弧/边->活动,边上的权值表示活动的持续时间;
}