有向无环图:无环的有向图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构成的路径便是关键路径