上篇博客我们介绍了AOV网的拓扑序列,请参考《数据结构(七) AOV网的拓扑排序(Swift面向对象版)》。拓扑序列中包括项目的每个结点,沿着拓扑序列将项目进行下去是肯定可以将项目完成的,但是工期不是最优的。因为拓扑序列是一个串行序列,如果按照该序列执行项目,那么就是串行执行的。我们知道在一个项目中的一些子工程是可以并行来完成的,这也就类似我们的多线程。今天我们要解决的问题就是找出一个关键路径,是工期最优并保证工程的完成。什么是关键路径,我们在下方会进行详细介绍。
一、关键路径概述
在聊关键路径之前,我们先看一个简单的实例,如下图所示。我们将下方这个有向无环图看做是整个工程,将每个节点看做是该项目工程的一个子工程。子工程间又有一定的优先级。在下方图中,A的优先级最高。A做完后,B、C才可以进行开发。B、C完成后,我们才可以开发D。从下图中我们不难看出,该图的拓扑序列为A, B, C, D。如果我们按照串行的方式来完成此工程的话,那么工程完成的顺序可以是A-5->B, A-8->C, B-3->D, C-10->D。总时间为26。
从上面这个序列中我们显然可以看出来这不是最优的,因为A->B, A->C可以同时进行,B->D和C->D也可以同时进行。在允许某些子工程同时进行的情
