從源點到匯點路徑長度最長的路徑為該project的關鍵路徑,即關鍵路徑可以保證全部路徑的活動都可以完畢。
ok,再次進入我們的作業題:
例如以下圖所看到的的AOE網(弧上權值代表活動的持續天數)
1)完畢此project最少所須要多少天?
2)哪些是關鍵活動,在圖中表示出關鍵路徑
我們先計算最早發生時間ve和最遲發生時間vl:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
Ve | 0 | 5 | 6 | 12 | 15 | 16 | 16 | 19 | 21 | 23 |
Vl | 0 | 9 | 6 | 12 | 15 | 21 | 16 | 19 | 21 | 23 |
首先呢,編號1和編號10分別為該project的源點和匯點,我們規定最早發生時間ve(源點)=0,最遲發生時間vl(匯點)=ve(匯點)。那么這兩個量該怎樣計算呢,看圖:
對於事件i來說,ve(i) = Max{ve(m) + dut(<m, i>)},vl(i) = Min{vl(j) – dut(<i, j>)};當中ve(m)代表i前一個事件的最早發生時間,dut(<m, i>)表示從m到i的持續時間,大家能夠把它看成一個遞歸算法,一直調用ve(),直到ve(源點)為止,然后取其最大值,由於它要保證全部路徑上的活動都能完畢;而最遲發生時間和前者一樣,一直遞歸調用vl(),直到vl(匯點)為止,然后取其最小值就可以。
回到原題中對比例圖能夠非常快地得到表格所看到的內容。
我們再來看兩個概念:e(i)和l(i),前者為活動ai 的最早可能開始時間,后者為活動ai的最遲同意開始時間。差別於前邊的ve和vl,e和l為標識的是某活動的時間,而前者是某事件的時間。
假如從事件m到事件i的活動為af,則有e(f)=ve(m), l(f)=vl(i)–dut(<m,i>) ,即活動af的最早可能開始時間為其弧尾事件最早可能發生時間;最遲同意開始時間為其弧尾事件最遲發生時間與兩個事件的持續時間之差。是不是感覺有點別扭,但僅僅要理解了這幾個關鍵詞也就非常easy看懂了。於是乎 e(k) = l(k)的活動就是關鍵活動 ,請看圖表:
a1 | a2 | a3 | a4 | a5 | a6 | a7 | a8 | a9 | a10 | a11 | a12 | a13 | |
權 | 5 | 6 | 3 | 6 | 3 | 3 | 4 | 1 | 4 | 5 | 2 | 4 | 2 |
e | 0 | 0 | 5 | 6 | 6 | 12 | 12 | 15 | 15 | 16 | 19 | 16 | 21 |
l | 4 | 0 | 9 | 6 | 12 | 12 | 17 | 15 | 15 | 16 | 19 | 21 | 21 |
由圖和前邊計算的ve和vl能夠得到各活動的e和l,如上表所看到的,則關鍵活動為a2,a4,a6,a8,a9,a10,a11和a13,所以完畢該project至少須要的天數d=6+6+3+1(4)+5(2)+2=23,該project的關鍵路徑有兩條,即1->3 ->4->5->7->9->10和1->3->4->5->8->9->10。