軟體專案活動圖關鍵路徑演算法演示(轉載)
阿新 • • 發佈:2018-11-10
如上圖,是一個AOE網,點表示狀態,邊表示活動及其所需要的時間。為了求出關鍵路徑,我們使用一下演算法:
1.求出到達各個狀態的最早時間(按最大計)
這個過程是要從源點開始向匯點順推:
- V1是源點,其最早開始時間是0。
- V2、V3、V4最早時間分別是是6、4、5。
- 對於V5而言,V2到V5所花費時間是6+1=7,而V3到V5所花費時間是4+1=5。我們要按最大計,也就是V5最早時間是max{7,5}=7,按最大計是因為只有活動a4和a5同時完成了,才能到達V5狀態。V3到V5需要5分鐘,但是此時a4活動尚未完成(7分鐘),所以都不能算到達V5,故而要按最大計。
- V6只有從V4到達,所以V6的最早完成時間是(5+2=)7。
- 同理,V7最早完成時間是16。
- 對於V8而言,和V5處理方法一致。V8=max{V5+7,V6+4}={7+7,7+4}=14。
- V9可算出是18。
這樣,我們可以得到各個狀態的最早時間的表:
最早時間表2.求出到達各個狀態的最晚時間(按最小計)
這個過程是要從匯點開始向源點逆推:
- V9完成時間為18,最V7最遲開始時間是(18-2=)16
因為活動a10所需時間2。如果V7開始時間比16晚,則V9完成時間就會比18晚,這顯然不對。 - 同理,V8最遲開始時間為14。
- 對於V5而言,可以從V7、V8兩個點開始向前推算,此時要按最小計,即V5(最晚)=min{V7-9,V8-7}=min{16-9,14-7}=7。
請注意!!,min{V7-9,V8-7}中,V7、V8取的都是前面算出的最遲開始時間(而不是最早開始時間)。
按最小計
按最小計 - 同理,可計算出剩下的點
這樣,我們可以得到各個狀態的最晚時間的表:
最晚時間表事實上,源點和匯點的最晚時間和最早時間必定是相同的。
3.求出關鍵路徑
求出關鍵活動,則關鍵活動所在路徑即為關鍵路徑
對於a1:
這表明,a1最早只能從0時刻開始,最晚也只能從(6-6=)0時刻開始,因此,a1是關鍵活動。
對於a2:
a2最早要從0時刻開始,但是它最晚開始時間卻是(6-4=)2。也就是說,從0開始做,4時刻即完成;從2開始做,6時刻恰好完成。從而在[0,2]區間內任意時間開始做a2都能保證按時完成。( 請區別頂點的最早最晚和活動的最早最晚時間。圖示中的最早最晚是頂點狀態的時間,活動的最早最晚開始時間卻是基於此來計算的)。
由於a2的開始時間是不定的,所以它不能主導工程的進度,從而它不是關鍵活動。
一般的,
活動用時X時間,它最早要從E1時刻開始(一開始就開始),最晚要從L2-X時刻開始(即恰好完成)。所以,如果它是關鍵活動,則必然有 E1=L2-X,否則它就不是關鍵活動。
值得注意的是,頂點的最早開始時間等於最晚開始時間 是 該頂點處於關鍵路徑 的 不充分不必要條件。
上表中藍色底紋表示的點即為處於關鍵路徑的點。儘管它們的最早時間與最晚時間都相同,但是這與它們是否為關鍵路徑的點 無關。因為這還取決於起始點的最早時間以及活動時間。
作者:KyrinWoo
連結:https://www.jianshu.com/p/1857ed4d8128