AOE 网络

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)

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

时间: 2024-12-15 05:41:24

AOE 网络的相关文章

AOE网络的关键路径问题

关于AOE网络的基本概念可以参考<数据结构>或者search一下就能找到,这里不做赘述. 寻找AOE网络的关键路径目的是:发现该活动网络中能够缩短工程时长的活动,缩短这些活动的时长,就可以缩短整个工程的时长.因此,寻找关键路径就是寻找关键活动. 接下来开始寻找一个工程中的关键路径(关键活动). 寻找关键路径,每本教材都会提及四个特征属性:Ve[],Vl[],e[],l[],此处可能还补充一个属性:活动ai的时间余量,也就是l[i]-e[i],当某个活动的时间余量=0时,该活动就是关键活动.所以

图论算法 有图有代码 万字总结 向前辈致敬

图的定义 背景知识 看到这篇博客相信一开始映入读者眼帘的就是下面这幅图了,这就是传说中的七桥问题(哥尼斯堡桥问题).在哥尼斯堡,普雷格尔河环绕着奈佛夫岛(图中的A岛).这条河将陆地分成了下面4个区域,该处还有着7座连接这些陆地的桥梁. 问题是如何从某地出发,依次沿着各个桥,必须经过每座桥且每座桥只能经过1次,最终回到原地. 不知道这个问题且好奇的童鞋现在肯定在忙活着找出来这道题的结果了. 是伟大的数学家欧拉(Leonhard Euler)在1736年首次使用图的方法解决了该问题. 欧拉将上面的模

关键路径算法

相关概念: (1)AOE (Activity On Edges)网络 如果在无有向环的带权有向图中用有向边表示一个工程中的各项活动(Activity),用边上的权值表示活动的持续时间(Duration),用顶点表示事件(Event),则这样的有向图叫做用边表示活动的网络,简称AOE (Activity On Edges)网络.AOE网是一个带权的有向无环图.AOE网络在某些工程估算方面非常有用.例如,可以使人们了解: a.完成整个工程至少需要多少时间(假设网络中没有环)? b.为缩短完成工程所需

1-数据结构

此类题目最好的解决方法就是使用例子 首先由题目知道,这是一个循环队列,循环队列中只有mod才能进行有效的数据存储,所以A D被排除 由左图知道m是最后一个元素    所以  m = 8 rear表示队尾的实际位置,7的实际位置时8,因为7是队列的第八个数据,则得出rear = 8 length = 8 C B 公式可得  C = 1  B = 0 此题目问的是队首元素的实际位置,我们这个队列队首是0,她的实际位置时 所以此题选择C 树 节点的度:就是一个节点下分的子节点的个数 1号节点的度为3

图-第7章-《数据结构题集》习题解析-严蔚敏吴伟民版

习题集解析部分 第7章 图 ——<数据结构题集>-严蔚敏.吴伟民版        源码使用说明  链接??? <数据结构-C语言版>(严蔚敏,吴伟民版)课本源码+习题集解析使用说明        课本源码合辑  链接??? <数据结构>课本源码合辑        习题集全解析  链接??? <数据结构题集>习题解析合辑       相关测试数据下载  链接? 数据包       本习题文档的存放目录:数据结构\▼配套习题解析\▼07 图       文档中源

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

做这道题感觉异常激动,因为在下第一次接触拓扑排序啊= =,而且看了看解释,猛然发现此题可以用DP优化,然后一次A掉所有样例,整个人激动坏了,哇咔咔咔咔咔咔咔~ 咔咔~哎呀,笑岔了- -|| 旅行商(TSP) Description Shrek is a postman working in the mountain, whose routine work is sending mail to n villages. Unfortunately, road between villages is

数据结构--图(下)--拓扑排序

拓扑排序 思维导图也是图的一种 拓扑序:如果图中从V到W有一条有向路径,则V一定排在W之前.满足此条件的顶点排序成为一个拓扑序.  V->W 获得一个拓扑序的过程就是拓扑排序 AOV如果有合理的拓扑序,则必定是有向无环图(Directed Acyclic Graph,简称DAG). 第一排没有预修课程的课.然后抹掉顶点和边, 每一次输出哪个顶点呢,没有前驱顶点,就输出(入度为0的顶点). 最后的拓扑序就产生了 DAG有向无环图. 拓扑排序的应用 AOE(Activity On Edge)网络  

《数据结构》_9图

图的基本概念 图的定义 图是由顶点集合V和边集合E组成的.分为有向图和无向图. 图的基本术语 邻接 顶点的度.入度.出度 路径和路径长度 自回路和多重图 完全图 子图(注:图的子图必须首先满足图的定义) 连通图和连通分量 生成树 有向树和生成森林 权和网 图的类型定义 有向图的抽象数据类型定义 ADT Graph{ 数据: 顶点的有限非空顶点集合V和边集合E,每条边由顶点的偶对<u,v>表示.数据元素之间的关系是多对多的关系. 运算: Init(G,n):初始化运算.构造一个包含n个顶点没有边

DP套题练习1

前言:练习①不难,但也有注意的地方. Q1: 给定AOE网络工程图,求完成时间及其中的关键工程. S1:先拓扑排序[记得用队列,O(n)的复杂度],确定DP的顺序(后效性).DP方程显然为:f[ to ] = max( f[ to ] , f[ x ] + val[ to ] ).求关键工程则逆推DP状态的转移过程. 细节:注意最后可能有多条路劲同时完成,要注意处理. #include<iostream> #include<algorithm> #include<cstrin