拓扑排序与关键路径

        在查漏补缺的时候我发现书中图论还有两个算法没有学习,今天把它们恶补了一下。

拓扑排序:拓扑排序是对有向无环图的各个点进行排序的一种算法,它经常用来判断图中是否存在环,也是关键路径的基础。

原理:拓扑排序的实现原理很简单,对图中的每个点进行入度统计,每次将入度为零的点从图中删除并且将与他相连的边也删除此时要更新其他点的入度,重复上述过程,如果最后不存在入度为零的节点则说明有环。

实现:今天刚学习完,还没有自己去实现,但我听完原理后有一些自己的实现思考。队列辅助实现,根据它的原理我觉得使用链式向前星去作为储存结构是最为合适的。

关键路径:

看下图:
拓扑排序与关键路径_第1张图片

该图有唯一一个起始点v1称为源点,有唯一一个终点称为汇点,那么如果现在我要问你,我要走完所有的点需要消耗多少时间,很显然,这有三条路能达到汇点,消耗时间分别是18,16,15。要所有的点都走遍很显然时间是18,毕竟就算其他路都达到了汇点也不能算所有路都走完了,因此我们把v1,v2,v5,v7,v9这条路称为关键路径。

那么怎么求关键路径呢?我们先了解下面几个概念:

什么是ETV?

ETV(Earliest Time Of Vertex):事件最早发生时间,就是顶点的最早发生时间;

什么是LTV?

LTVLatest Time Of Vertex):事件最晚发生时间,就是每个顶点对应的事件最晚需要开始的时间,如果超出此时间将会延误整个工期。

什么是ETE?

ETE(Earliest Time Of Edge):活动的最早开工时间,就是弧的最早发生时间。

什么是LTE?

LTE(Lastest Time of Edge):活动的最晚发生时间,就是不推迟工期的最晚开工时间。

关键路径上的节点有个很重要的性质,它们的ETV与LTV相等,那么就简单了,就转变为求每个节点的ETV和LTV不就行了,那么怎么求呢,这就要用到我们的拓扑排序了。实现我还暂未自己实现,待到明天我会补上。

你可能感兴趣的:(算法,数据结构)