軟件項目活動圖關鍵路徑算法演示(轉載)

如上圖,是一個AOE網,點表示狀態,邊表示活動及其所須要的時間。爲了求出關鍵路徑,咱們使用一下算法:算法

1.求出到達各個狀態的最先時間(按最大計)


這個過程是要從源點開始向匯點順推:
  1. V1是源點,其最先開始時間是0。
  2. V二、V三、V4最先時間分別是是六、四、5。
  3. 對於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,故而要按最大計。
  4. V6只有從V4到達,因此V6的最先完成時間是(5+2=)7。
  5. 同理,V7最先完成時間是16。
  6. 對於V8而言,和V5處理方法一致。V8=max{V5+7,V6+4}={7+7,7+4}=14。
  7. V9可算出是18。

這樣,咱們能夠獲得各個狀態的最先時間的表:spa

最先時間表

2.求出到達各個狀態的最晚時間(按最小計)


這個過程是要從匯點開始向源點逆推:
  1. V9完成時間爲18,最V7最遲開始時間是(18-2=)16
    逆推

    由於活動a10所需時間2。若是V7開始時間比16晚,則V9完成時間就會比18晚,這顯然不對。
  2. 同理,V8最遲開始時間爲14。
  3. 對於V5而言,能夠從V七、V8兩個點開始向前推算,此時要按最小計,即V5(最晚)=min{V7-9,V8-7}=min{16-9,14-7}=7。
    請注意!!,min{V7-9,V8-7}中,V七、V8取的都是前面算出的最遲開始時間(而不是最先開始時間)。
    按最小計

    最小計,是由於若是按最大計去計算V5的最晚開始時間,那麼加上a7和a8的活動時間後,V七、V8至少有一個會比以前逆推算得出的最晚時間還要晚,這就發生了錯誤。
  4. 同理,可計算出剩下的點

這樣,咱們能夠獲得各個狀態的最晚時間的表:blog

最晚時間表

事實上,源點和匯點的最晚時間和最先時間一定是相同的。io

3.求出關鍵路徑


求出關鍵活動,則關鍵活動所在路徑即爲關鍵路徑

對於a1:class


這代表,a1最先只能從0時刻開始,最晚也只能從(6-6=)0時刻開始,所以,a1是關鍵活動。方法

對於a2:im


a2最先要從0時刻開始,可是它最晚開始時間倒是(6-4=)2。也就是說,從0開始作,4時刻即完成;從2開始作,6時刻剛好完成。從而在[0,2]區間內任意時間開始作a2都能保證按時完成。( 請區別頂點的最先最晚和活動的最先最晚時間。圖示中的最先最晚是頂點狀態的時間,活動的最先最晚開始時間倒是基於此來計算的)。
因爲a2的開始時間是不定的,因此它不能主導工程的進度,從而它不是關鍵活動。

通常的,img


活動用時X時間,它最先要從E1時刻開始(一開始就開始),最晚要從L2-X時刻開始(即剛好完成)。因此,若是它是關鍵活動,則必然有 E1=L2-X,不然它就不是關鍵活動。

值得注意的是,頂點的最先開始時間等於最晚開始時間 是 該頂點處於關鍵路徑 的 不充分沒必要要條件。di


上表中藍色底紋表示的點即爲處於關鍵路徑的點。儘管它們的最先時間與最晚時間都相同,可是這與它們是否爲關鍵路徑的點 無關。由於這還取決於起始點的最先時間以及活動時間。
做者:KyrinWoo 連接:https://www.jianshu.com/p/1857ed4d8128
相關文章
相關標籤/搜索