1、定义

如果在无向环的带权有向图中

- 用有向边表示一个工程中的活动

- 用边上的权值表示活动的持续时间

- 用顶点表示事件

则这样的有向图叫做用边表示活动的网络,简称AOE网络

AOE在工程方面非常有用:

例如:

(1)完成整个工程至少需要多少时间(假设没有环);

(2)为缩短完成工程所需时间,应当加快那些活动?

从源点到各个顶点,以至从源点到汇点的有向路径可能不止一条。这些路径的长度也可能不同,完成不同路径的活动所需时间不同,但只有各条路径上所有活动都完成了,整个工程才完成。

Hence, 完成整个工程所需时间取决于从源点到汇点的最长路径长度,即在该路径上所有活动的持续时间之和,给路径称为关键路径。

为了找出关键路径,必须找出关键活动,即不按期完成就会影响整个工程完成的活动。

关键路径上的所有活动都是关键活动。

修改后的拓扑排序:

void TopologicalSort(AdjGraph G)
{
Stack S;
StackEmpty(S);
int j; for(int i=0;i<n;i++) //入度为0的顶点进栈
if(count[i]==0)
Push(S,i); while(!StackEmpty(S))
{
Pop(S,j); //退栈
cout << j << endl; //输出栈顶元素
Push(T,j); //j号顶点入栈
EdgeNode * p=data[j].firstarc;
while(p!=NULL) //扫描出边表
{
int k=p->adjvex; //另一顶点
if(--count[k]==0) //顶点入度减一
Psuh(S,k); //顶点入度减至0,进栈
if(ve[j]+p->info>ve[k])ve[k]=ve[j]+p->info;
p=p->nextarc;
}
}
} CristicalPath(G)
{
vl[0..vexnum-1]=ve[vexnum-1];
while(!StackEmpty(T))
{
Pop(T,j);
p=G.data[j].firstarc;
while(p!=NULL)
{
k=p->adjvex;
dut=p->info;
if(vl[k]-dut<vl[j]) vl[j]=vl[k]-dut;
}
for(j=0;j<vexnum;j++)
for(p=G.data[j].firstarc;p;p=p->next)
{
k=p->adjvex;
dut=p->info;
ee=ve[j];
el=vl[k]-dut;
if(ee=el)printf("j,k");
}
}
}

  

算法分析:

在拓扑排序求Ve[i],与逆拓扑排序求Vl[i]时需要的时间复杂度为O(n+e),求各个活动e(k)与l(k)需要的时间复杂度为O(e),

则总的时间复杂度为O(n+e)

注意到并不是改变任何一个关键活动的时间都可以改变总时间

AOE 网络的更多相关文章

  1. AOE网络的关键路径问题

    关于AOE网络的基本概念可以参考<数据结构>或者search一下就能找到,这里不做赘述. 寻找AOE网络的关键路径目的是:发现该活动网络中能够缩短工程时长的活动,缩短这些活动的时长,就可以 ...

  2. AOE网络——求关键路径

    1.计算每个活动的最早发生时间(正序) earliest[1]=0; earlest[k]=max{earliest[j],+dut[j][k]} 2.计算每个活动的最晚发生时间(逆序) lastes ...

  3. 算法-图(4)用边表示活动的网络(AOE网络)Activity On Edge Network

    有向边表示活动,权值表示活动的持续时间,顶点表示事件. 只有一个开始点和完成点,称为源点.汇点,完成工程时间取决于从源点到汇点的最长路径长度,即在这条路径(关键路径)上所有活动的持续时间之和.关键路径 ...

  4. ACM/ICPC 之 数据结构-邻接表+DP+队列+拓扑排序(TSH OJ-旅行商TSP)

    做这道题感觉异常激动,因为在下第一次接触拓扑排序啊= =,而且看了看解释,猛然发现此题可以用DP优化,然后一次A掉所有样例,整个人激动坏了,哇咔咔咔咔咔咔咔~ 咔咔~哎呀,笑岔了- -|| 旅行商(T ...

  5. NetworkX系列教程(10)-算法之三:关键路径问题

    小书匠Graph图论 重头戏部分来了,写到这里我感觉得仔细认真点了,可能在NetworkX中,实现某些算法就一句话的事,但是这个算法是做什么的,用在什么地方,原理是怎么样的,不清除,所以,我决定先把图 ...

  6. VirtualBox Ubuntu Server 16.04 手动设置 网络(IP, DNS, 路由)

    1. VirtualBox 设置全局网络 在virtualBox点击菜单管理->全局管理 配置NAT网络 参考下图配置, 依次点击相应的按钮并设置网络(其中DHCP任意, 将来我们都会使用固定I ...

  7. 教你轻松计算AOE网关键路径(转)

    原文链接:http://blog.csdn.net/wang379275614/article/details/13990163 本次结合系统分析师-运筹方法-网络规划技术-关键路径章节,对原文链接描 ...

  8. 05.Python网络爬虫之三种数据解析方式

    引入 回顾requests实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指 ...

  9. 教你轻松计算AOE网关键路径

    认识AOE网 有向图中,用顶点表示活动,用有向边表示活动之间开始的先后顺序,则称这种有向图为AOV网络:AOV网络可以反应任务完成的先后顺序(拓扑排序). 在AOV网的边上加上权值表示完成该活动所需的 ...

随机推荐

  1. VS辅助工具

    tfs签入策略修改工具Team Foundation Server 2015 Power Tools(tfpt) 添加签入禁止策略 \*/bin \*/obj \*/Release \*/Debug ...

  2. 转载:jsp九大内置对象和四大作用域

    摘要: JSP的九大内置对象: page,application,session,request,response,out,exception,config,pageContext. JSP的四个作用 ...

  3. js中访问action

    jsp中 <a href="javascript:Excel();" class="easyui-linkbutton" plain="true ...

  4. form -转载于blfshiye

    Form API 表单API 文件夹 1.概述 2.亮点 3.使用方法 4.表单元素 4.1 基本表单元素 4.2 定制表单元素 5.经常使用函数 5.1  add_action_buttons($c ...

  5. c++设计模式-----抽象工厂模式

    抽象工厂模式 要创建一组相关或者相互依赖的对象 作用:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. UML类图 抽象基类: 1)AbstractProductA.Abstrac ...

  6. c#弱事件(weak event)

    传统事件publisher和listener是直接相连的,这样会对垃圾回收带来一些问题,例如listener已经不引用任何对象但它仍然被publisher引用 垃圾回收器就不能回收listener所占 ...

  7. C# 语言规范_版本5.0 (第9章 命名空间)

    1. 命名空间 C# 程序是利用命名空间组织起来的.命名空间既用作程序的“内部”组织系统,也用作“外部”组织系统(一种向其他程序公开自己拥有的程序元素的方法). using 指令(第 9.4 节)用来 ...

  8. Tiny6410之控制icache驱动

    什么是cache:    基于程序访问的局限性,在主存和CPU通用寄存器之间设置了一类高速的.容量较小的存储器,把正在执行的指令地址附件的一部分指令或数据从主存调入这类存储器,供CPU 在一段时间内使 ...

  9. PHP22期基础班总结

    11月7号,我们结束了为期17天的PHP基础班课程,最后一天的晚自习之后,马总问了我们的一个问题,基础班1000块钱的课程,我们认为是否值得这个价格?这其实是一个很好的问题. 2016年1000块钱能 ...

  10. php函数搜集

    数组去重: 方法1:php自带此功能的函数array_unique($arr) 方法2:$arr = array_flip(array_flip($arr)); //这样便可以删除重复元素. 比上面的 ...