DAG(Directed AcyclineGraph) 有向无环图
用来描述一个工程或系统的进行过程。
一个工程可以分为若干个子工程,只有完成了这些子工程,
就可以导致整个工程的完成
怎么表示子工程(活动)?
一种是用节点表示活动
另一种使用便表示活动
AOV网:拓扑排序
顶点表示活动,弧表示活动之间的优先制约关系
称这种有向图为顶点表示活动的网,简称AOV网(Activity On Vertex network)
AOE网:关键路径
以弧表示活动,以节点表示活动的开始或结束事件,
称为边表示活动的网,简称AOE网(Activity On Edge)
拓扑排序:
AOV网不允许有贿赂,若有贿赂,则表明某项活动以自己为先决条件,这是荒谬的
在AOV网中没有回路的奇纳提下,将全部活动排列成一个线性序列,
使得若AOV网中有 弧<i, j>存在, 则这个序列中, i一定排在j的前面
则有这种性质的线性序列称为 拓扑有序序列, 相应的拓扑有序排序的算法成为拓扑排序
如何判断AOV网是否存在回路?
拓扑排序的方法:
在有向图中选一个没有钱去的顶点 且 输出
从图中删除该顶点和所有以他为尾的弧
重复上述两部,知道全部顶点全部取出
或者途中不存在无前驱的节点为止
关键路径
AOE网 弧表示活动 权表示时间 节点表示事件
例一:
某项目的任务是对A公司的办公室重新装修
如果10月1日前完成装修工程,项目最迟应该何时开始?
例二:
准备宴会,晚六点开始,最迟几点开始准备?
压缩哪项活动时间可以失踪事件减少?
关于AOE网,我们关心两个问题:
(1)完成整项工程至少需要多少时间?
(2)哪些活动是影响工程进度的关键?
关键路径——路径长度最长的路径(不唯一)
关键路径上的活动是关键活动
4个描述量
ve(vj)——表示事件vj的最早发生时间
ve(v1) = 0
vl(vj)——表示事件vj的最迟发生时间
e(i)——表示活动ai的最早开始时间
l(i)——表示ai的最迟开始时间
l(i) - e(i) ——表示完成后动ai的时间余量
关键活动——l(i) == e(i)
如何找关键活动?
设活动ai用弧<j, k>表示,其持续时间记为:wj,k
则有:
活动的最早开始时间即为j的最早发生时间
(1)e(i) = ve(j);
活动的最晚开始时间等于k的最晚发生时间 - 活动的时间
(2)l(i) = vl(k) - wj,k
【注意】l(i) != vl(j);
如何求ve(j)和vl(j)?
(1)
从ve(1)==0开始
ve(j) = max(ve(i) + wi, j)
一个顶点的做早开始时间就是 从上一个顶点(可能有好几个)
的最早开始时间 + 弧的权值 的最大值(得等所有的活动都完成)
(2)
从vl(n) = ve(n)开始
最后一个事件 的 最早开始时间 == 最晚开始时间
vl(i) = min(vl(j) - wi, j)
一个节点的最晚开始时间
就是从下一个顶点的(可能有好几个)
的最晚开始时间 - 弧的权值
保证所有的活动都能完成
所以要求最小值