基于邻接矩阵存储的AOE网的关键路径算法的实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

F
福建电脑
UJIAN COMPUTER
福建电脑2017年第11期
1引言
有向无环图在工程和管理中的应用有两种:AOV 网和
AOE 网,前者用顶点表示活动,有向弧表示活动间。

后者用顶点表示事件,弧表示活动,弧上的权值表示活动持续的时间。

AOE 网在工程计划和管理中用于解决两类问题,
一类是求解影响工程进度的关键活动,另一类是求解完成整个工程所需要的最少时间。

在AOE 网中唯一一个入度为零的顶点称作源点;唯一一个出度为零的顶点称作汇点。

从源点到汇点的最长路径称作关键路径,关键路径的长度就是完成整个工程任务所需要的最短时间。

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

如果这些活动中的任意一项未能按期完成,则整个工程就要延期。

如果某个关键活动的进度能够提前,那么整个工程就可能提前完成。

2算法所用数据结构:设图G =(V ,VR )是一个具有n 个顶点的有向网,其中,V 为顶点集,VR 为两个顶点间的关系的集合。

G 的邻接矩阵定义为如下n 伊n 矩阵A :
则定义如下数组和矩阵:
top_sort [n ]:存放G 的一个拓扑序列ve [n ]:ve [i ]为事件vi 的最早发生时间vl [i ]:vl [i ]为事件vi 的最晚发生时间e [n ][n ]:e [i ][j ]为活动<vi ,vj>的最早开始时间l [n ][n ]:l [i ][j ]为活动<vi ,vj>的最晚开始时间
3基于邻接矩阵的拓扑排序(Topological Sort)的实现在顶点集V 和弧集E 构成的有向图G=(V ,E)中,满足如下条件的顶点序列(v i1,v i2,v i3…,v in )称为拓扑序列:对于序列中的任意两个顶点v i 、v j ,如果在G 中存在一条从v i 到v j 的路径,那
么在序列中v i 一定在v j 之前。

如图1所示有向网的一个拓扑序列为:v 0,v 1,v 2,v 3,v 4,v 5,v 6,v 7,v 8。

拓扑排序算法的基本思想:
(1)从AOE 网中选择一个入度为0的顶点输出;(2)将该顶点和从它为发出的弧全部删除;(3)重复(1)和(2),直到不存在入度为0的顶点为止;
(4)如果输出的顶点数小于AOE 网中的顶点数,则那么AOE 网中一定存在回路,否则输出的顶点序列就是一个拓扑序列。

有向图的存储形式不同,拓扑排序的具体实现算法也不同。

拓扑排序的两个基本操作在有向图G 的邻接矩阵存储中的实现方法如下:
(1)找图G 中入度为0的顶点,也就是找A 中值全为∞的列对应的顶点;
(2)删除以i 为起点的所有弧,
就是将矩阵A 中i 行的元素全部置为∞。

因此,基于邻接矩阵表示的存储结构的拓扑排序算法如下:
(1)i=0;
(2)找一个值全为∞的列j ,若找到则转(3);否则,若所有的
列都已进入拓扑序列(求出了top_sort []的n 个元素),
拓扑排序结束;若有列未曾进入拓扑序列(top_sort [i ]中有效元素个数少于n ),则该图中有回路;
(3)top_sort [i ]=j ,把新序号赋给所找到的列;(4)将矩阵中j 行的元素全部置为∞;
(5)i=i+1,
转(2)。

4基于邻接矩阵的关键路径算法要求解关键路径,必须先求出以下数据:(1)事件vi 的最早发生时间ve [i ]:ve [i ]等于从源点到顶点
vi 的最长路径的长度。

从源点开始,
按拓扑序列向汇点递推,依次求出每个事件的ve [i ]:
ve [0]=0;ve [i ]=Max{ve [k ]+A [k ][i ]}<v k ,v i >∈T ,1≤i ≤n-1;其中,T 为所有以i 为弧头的弧<vk,vi>的集合。

(2)事件v i 的最晚发生时间vl [i ]:令汇点按其最早发生时间发生,从汇点开始,按逆拓扑序列向源点递推,依次求出每个事件的vl [i ]:
vl [n-1]=ve [n-1];vl [i ]=Min{vl [k ]+A [i ][k ]}(<v i ,v k >∈S,0≤i ≤n-2)其中,S 为所有以i 为尾的弧<v i ,v k >的集合。

基于邻接矩阵存储的AOE 网的关键路径算法的实现
王荣
(渭南师范学院网络安全与信息化学院陕西渭南714099)
【摘要】有向无环图在工程计划和经营管理中有着广泛的应用。

其中,AOE 网主要用来确定工程的关键活动及关键路径,从而求得完成整个工程所需的最短时间,保证工程尽快按时完成。

本文给出了基于邻接矩阵表示的有向图的求关键路径算法的实现,并对关键路径算法的时间效率和空间效率进行了分析。

【关键词】AOE 网;拓扑排序;关键
路径图1AOE 网
DOI:10.16707/ki.fjpc.2017.11.057
112··
F
福建电脑
UJIAN COMPUTER
福建电脑
2017年第11期动学习和终身学习的理念,主动参与学习、不断更新知识、提高自身的综合素养,才能真正为教师的教学科研和社会服务提供
智慧服务。

另外为了支持用户的教学、
科研和社会服务方面的知识服务需要,智慧馆员还要结合自身专业特点,
在某一专业领域加强学习,了解学科的最新发展动态,
研究热点以及未来趋势等,主动查找和归类相关的文献信息,
可以定期向用户推送相关的文献知识,提供个性化、
立体化、系统化的文献采集和知识推送服务。

智慧馆员的一个目标就是要成为某一个领域或者是某几个领域的文献研究专家,当好用户的助手和参谋,充分发挥自身专才,为用户提供系统性、专家型的知识服务。

3.2科研能力教学、科研和社会服务是高校的三大职能,而高校图书馆
很重要的职责就是为高校教学、
科研和社会服务提供技术和智力支持,因此这就要求图书馆的服务必须走在教学科研和社会服务工作的前面,必须随时跟踪国内外各学科专业的研究现状
及最新成果,加强对情报信息进行分析、
研究、归类、汇总,整合出方便用户查询和使用的再生新知识信息元。

因此,
智慧馆员除了要为用户提供专业的文献收集和推送的服务之外,
还要具有一定的科研辅助能力,清楚科研的流程和相应的规范,
了解用户团队的科研进度,定期主动推送参考文献,
并且利用搜索引擎或知识发现工具对文献进行搜索,
通过大数据分析所获取的数据和文献获得有价值的信息,
帮助用户团队挖掘新的研究成果和科学发现;
3.3服务意识
智慧图书馆是新技术发展起来的知识服务网络,
新技术的应用还是要依赖于智慧馆员的主动发现和主动服务,
这就要求智慧馆员要善于学习,不断地改变服务模式,
改变传统的服务观念,适应服务手段的网络化和虚拟化、
服务对象的专业化和个性化、服务过程的浸润化和全程化,
只有不断地提升服务响应速度和服务质量才能使智慧图书馆真正发挥出其最大的效用。

4.结论
智慧图书馆建设的关键是建立一支学习能力好、
服务意识强、服务能力高的智慧馆员队伍。

馆员需要及时调整角色定位,努力在教学、科研和社会服务等方面为用户提供专家型的知识服务,才能使智慧图书馆真正发挥其在教学、科研和社会服务中的参谋和助手的作用。

参考文献:
[1]金敏婕.智慧图书馆———构建智慧城市之思考田.图书馆工作与研究[J ],2013,(4):17-20.
[2]侯明艳.智慧图书馆环境下高校馆员的角色转变.现代情报[J ],2015(5):165-167
[3]陈星星.图书馆智慧馆员的培养及制度建设.产业与科技论坛[J ],2015(15):253-254
[4]马明霞.智慧图书馆员的内涵与提升途径.农业图书情报学刊[J ],2014(5):198-200
[5]伍素梅.基于智慧服务的图书馆员能力建设.佛山科学技术学院学报[J ](社会科学版),2015(1):94-96
(3)活动ai(即<v j ,v k >)的最早开始时间e [j ][k ]:e [j ][k ]等于从源点到顶点j 的最长路径的长度,所以:e [j ][k ]=ve [j ]。

(4)活动ai(即<v j ,v k >)的最晚开始时间l [j ][k ]:设活动ai (即<v j ,v k >)的持续时间为A [j ][k ],则l [i ]=vl [k ]-A [j ][k ]。

(5)活动ai(即<v j ,v k >)的松弛时间:ai(即<v j ,v k >)的最晚开始
时间与最早开始时间之差,即l [i ]-e [i ]。

其中,松弛时间为0的活动,即e [[j ][k ]=l [j ][k ]的活动就
是关键活动。

求关键路径的具体步骤:
(1)对图中顶点进行拓扑排序,同时按拓扑序列依次求出每个事件的ve [i ];
(2)按逆拓扑序列依次求出每个事件的vl [i ];(3)求出每个活动的e [j ][k ]和l [j ][k ];(4)找出e [[j ][k ]=l [j ][k ]的活动,即为关键活动。

(5)由关键活动构成的源点到汇点的路径即为关键路径。

5算法性能分析
设有向网中共有n 个顶点,e 条边。

对网中的顶点沿着从源点到汇点的方向编号建立邻接矩阵,进行拓扑排序并将拓扑排序的结果存放在数组top_sort []中。

5.1时间复杂度分析
求关键路径算法的时间消耗主要包括以下几部分:(1)求每个事件的最早发生时间ve [i ],根据前面介绍的算法,求ve [i ]与顶点v i 的入度相关,因而求所有事件的ve [i ]的总时间消耗为T_ve(n)=n
i =1∑ID (v i )=n+e 。

(2)求每个事件的最晚发生时间vl [i ],根据前面介绍的算法,求vl [i ]与顶点v i 的出度相关,因而求所有事件的vl [i ]的总
时间消耗为T_vl(n)=n
i =1
∑OD (v i )=n+e 。

(3)求每个活动a i 的最早开始时间e [j ][k ],根据前面介绍
的算法,有e [j ][k ]=ve [j ]。

活动数等于弧数,所以T_e(e)=e 。

(4)求每个活动a i 的最晚开始时间l [j ][k ],根据前面介绍的算法,有l [i ]=vl [k ]-A [j ][k ]。

活动数等于弧数,活动数等于弧数,
所以T_l(e)=e 。

(5)求活动a i 的时间余量的时间复杂度为T_r(e)=e 。

所以,求有n 个顶点e 条边的AOE 网的关键路径算法的时间复杂度为:
T(n,e)=T_ve(n)+T_vl(n)+T_e(e)+T_l(e)+T_r(e)=n+e +n+e+e+e+e=O(n+e)。

5.2空间复杂度分析
算法实现所需数据结构前面已经介绍,因此其空间复杂度为:
S(n)=n*n+n+n+n+n*n+n*n=O(n 2)
参考文献:
[1]耿国华.数据结构———C 语言描述[M ].西安:西安电子科技大学出版社,2002.
[2]严蔚敏,吴伟民.数据结构(C 语言版)[M ].北京:清华大学出版社,1997.
[3]第07章图(3)[OL ]./p-315338410.html,2017.
(上接第82页)
113··。

相关文档
最新文档