###AOE问题总结###
@(算法学习)
翻了一下笔记,发现对AOE问题当时的理解比现在的理解要深刻许多。看来许久不用,慢慢对概念的印象就会渐渐模糊。而对于那些精心思考过,有不同编码的信息,无论多久,想起来都非常形象深刻。所以,生活中还是需要刻意编码,编故事,联想,比喻,内化等。当知识真的为自己融会贯通时,就像问你求解一元二次方程,因式分解等问题时,那样不假思索,得心应手。你从不会怀疑自己不记得a,b,c这样的简单概念,因为它们早已深入骨子里了。
首先是AOE的概念:Activity On Edge.也就是说我们用边代表活动。顶点表示事件。边上的权值表示活动的持续时间。因此这样的有向图也被称作活动网。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZqnvRjCq-1571673660047)(https://img-blog.csdn.net/20161115151333153)]
一些简单的说明:
- 源点,即起始点:没有入边。
- 汇点,即终点:没有出边
两个性质,或者说原则:
- 只有某点所代表的事件发生后,从该点出发的各活动才能开始
- 只有在进入某顶点的各活动都已经结束,该顶点代表的事件才能发生。
这就是真实生活的一种映射。每一个事件的发生之前,需要很多很多准备活动,就是图中圆圈前面要进入的边。也即箭头指向的边。每一个边一定两头是事件,只要左边的事件发生,这个活动就可以发生了。
####关键路径####
AOE网中某些活动可以同时进行。那么完成工程就意味着完成所有的活动。考虑到并行性,从起点到终点的最大路径长度就是完成整个工程的时间。事件的发生用时不考虑,往往一瞬间就发生了,而活动持续时间需要计算。
- 具有最大路径长度的路径称为关键路径。
- 关键路径上的活动称为关键活动。
因此,关键路径的长度是整个工程所需要的最短工期。
此外,特别注意,关键路径并不一定只有一条,所以只改变一条,有时候不能改变全局,需要计算所有的关键路径才能进行完整的工程优化。
在算法设计中,需要用到四个量进行。如果手动解题,不必按照算法来,因为给定的有向图不可能非常复杂,否则用四个量进行计算计算量也非常大。我推荐用穷举搜索法。路径一般都不会太多。上面的图实际上就只有四条路径!穷举也就1分钟搞定的事情。
如果用计算机的算法解,将会非常复杂,下面将会说明。
四个参考量:
- 事件的最早发生时间ve[k], v是vertex,表示顶点,e是early,表示早。ve[k]的计算从左往右按照箭头的指示进行。其中初态ve[1] = 0,即起点最早发生时间是0时刻。
既然是考察事件,那么,进入vk的所有活动 < v j , v k > <vj,vk> <vj,vk>都结束时,vk才可以发生。
递推公式是:
{ v e [ 1 ] = 0 v e [ k ] = m a x ( v e [ j ] + l e n < v j , v k > ) \begin{cases} ve[1] = 0\\ ve[k] = max(ve[j]+len<vj,vk>) \end{cases} {
ve[1]=0ve[k]=max(ve[j]+