赞
踩
概念:若一个有向图不存在环,则称为有向无环图,简称DAG图
有向无环图是描述含有公共子式的表达式的有效工具
举例子:
把各个操作数不重复的拍成一排列,有:abcde
标出各个运算符的生效顺序(先后顺序优点出入无所谓
按顺序加入运算符,注意:“分层
”
2. 第二层:由于第三个需要加入的是乘法,需要用到第一层的(c+d)的结果,所以第三个加入的为第三层
3. 以此类推:
从底向上逐层检查同层的运算符是否可以合体
AOV网概念:若用DAG图表示一个工程,其
顶点表示活动
,用有向边<vi,vj>
表示活动vi必须
先于vj进行的这样一种关系,则将这种有向图称为顶点表示活动的回路
注意:!AOV网一定是一个有向无环图!
满足以下条件,称为该图的一个拓扑排序:
若定义为:
前驱(入度为0)
的顶点并输出逆拓扑排序的实现:
后继(出度为0)
的顶点并输出AOV(vertex):用顶点表示活动
AOE(edge):用边表示活动
AOE网:在带权有向图中,以顶点表示事件,以边上的权值表示完成该活动的开销(如完成活动所的时间),称之为用边表示活动的网络,简称为AOE
只有在某顶点所代表的事件发生后,从该顶点出发的各个有向边所代表的活动才能开始
只有在进入某顶点的各有向边所代表的活动都已经结束时,该顶点所代表的事情才能发生
另外,有些活动是可以并行进行的
最大路径长度的路径
称为关键路径
,而把关键路径上的活动
称为关键活动
最短时间
就是最短关键路径的长度
,若关键活动不能按时完成,则整个工程的完成时间就会延长
因为“开始炒了”与洗番茄、切番茄是可以并行的,所以只需要4分钟
首先按照拓扑排序 排好序
ve(源点)=0
ve(k)= Max{ve(j)+Weight(vj,vk)}
ve(k)= 是为前驱顶点的最早发生时间+活动的时间(边的权值)
翻译中文:最早发生时间是当前结点(vj)的最早发生发生时间 与 当前前驱节点(vk)的活动时间加和,若有两条路径的路径的话,则取最大
首先按照逆拓扑排序 排好序
vl(汇点) = ve(汇点) ——(ve的汇点:即拓扑排序的最后一个结点,vl的汇点:即逆拓扑排序的第一个结点)
vl(k)= Min{vl(j) - Weight(vk,vj)} (vj为vk的任意后继)
vl(k)= 是为后继结点的最迟发生时间 - 活动的时间(边的权值)
翻译中文:最迟发生时间是当前结点(vk)的最迟发生发生时间 与 当前后驱节点(vj)的活动时间相减,若有两条路径的路径的话,则取最小
最早发生时间e():这个活动所对应的狐尾
的所连的事件的最短发生时间,此前已经求过最短发生时间了,所以只需要根据之前的表哥就可以知道最短发生时间ve为多少
时间剩余量为0的活动代表,是绝对不允许拖延的,若拖延,那么整个活动完成的工期要比8更晚
炒菜是一个关键活动,我们将其压缩为a4=1,那么就可以提前结果
当一个关键活动耗时缩短的时候。。。
若用一分钟完成切番茄这个活动的话,那么完成番茄炒蛋只需要4分钟时间
在进行进一步的压缩,a3=0.5,此时就没办法让你的工程结束了,以前这条关键路径(最大路径长度的路径)已经不在是关键路径,上面需要4时间,下面不需要。
为前驱顶点的最早发生时间+活动的时间(边的权值),若有两条路径的路径的话,则取最大
当前结点(vk)的最迟发生发生时间 - 当前后驱节点(vj)的活动时间相减,若有两条路径的路径的话,则取最小
这个活动所对应的狐尾
的所连的事件的最早发生时间
这条弧所指向的这个结点(的最晚发生时间)-这条弧长的权值
时间剩余量为0的活动代表,是绝对不允许拖延的,若拖延,那么整个活动完成的工期要比关键路径长度更长、时间更晚
题目需要我们求关键路径长度:那么求出最早开始时间即可
拓展:求关键路径
求关键路径步骤:还需要算出最晚开始时间,当最早开始时间=最晚开始时间的部分,就是关键路径
求最晚开始时间:与其相连接的顶点的最晚发生时间-边权值(取最小值)
顶点10:最后一个顶点的最晚开始时间=最早开始时间
顶点9:最早开始时间-边界值:21-2=19
顶点4:有三条路径
10<-9<-8<-4 : 21-2-5-1=13
10<-9<-7<-4 : 21-2-4=14
10<-6<-5<-4 : 21-4-4-3=14
以上的算法是错误的
正确的应该是首先得出有三条路径:5、8、7
5的最晚开始时间12,那么需要通过12-3=9
8的最晚开始时间17,那么需要通过17-4=13
7的最晚开始时间14,那么需要通过17-4=13
取最小值,所以顶点4的最早发生时间为13
若最晚开始时间的第一个顶点不是0的话,则说明整个工期是可以提前的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。