1. 程式人生 > >《軟體工程》活動圖

《軟體工程》活動圖

基本概念

描述了活動和活動間依賴關係的圖,其中節點表示專案的里程碑(活動結束) ,線表示活動,線對應的時間表示活動的持續時間。
在這裡插入圖片描述

如圖例中 ,A->B 的這條線代表的這個活動從 A 開始,需要做 3天,才能結束,到達 B 里程碑(標誌著 A->B 這條線代表的活動的結束)。

注意:圖中的點不代表活動,並不能說活動 A 用 3 天到達活動 B,這是不準確的
如到達 I 里程碑的邊有兩條, D->I, B->I,意思是有兩個活動,完成後到達里程碑 I,並不能說 I 是個活動,如果這麼理解會在計算最晚開始時間時出現錯誤。

估算專案完成時間

關鍵路徑

定義: 從起點到終點總花費時間最長的路徑,即這個專案的最短完成時間,因為如果這條路徑無法完成那麼整個專案都不能算完成。所以這條路徑上的任務耽誤一點都會影響最後專案完成時間。
在這裡插入圖片描述

如上圖,其關鍵路徑為 A->B->D->I->J->L = 20,其他路徑都比它短。

冗餘時間

不耽誤總體進度的前提最晚開始時間最早開始時間差值,表示這個任務的機動開始時間,從最早開始時間開始,最晚可以拖的天數,再晚就會影響整個專案的完成時間。

簡而言之,就是一個活動你可以偷幾天的懶而不耽誤最後的理論進度(不晚於關鍵路徑的結束時間)

因此,路徑越短,冗餘時間越長

另外可以得出,關鍵路徑就是冗餘時間為0的路徑;一個活動圖可能會有多條關鍵路徑。

最早最晚開始時間

在這裡插入圖片描述
以上圖為例,開始逐步計算各個活動的最早最晚開始時間,(活動開始時間從1開始),表示方式為<最早開始時間,最晚開始時間,冗餘時間>

  • 首先計算關鍵路徑,可以得出 L a b
    = &lt; 1 , 1 , 0 &gt; L_{ab}=&lt;1,1,0&gt;
    L b d = &lt; 4 ( 1 + 3 ) , 4 ( 1 + 3 ) , 0 &gt; L_{bd}=&lt;4(1+3),4(1+3),0&gt; L d i = &lt; 9 ( 4 + 5 ) , 9 ( 4 + 5 ) , 0 &gt; L_{di}=&lt;9(4+5),9(4+5),0&gt; L i j = &lt; 11 , 11 , 0 &gt; L_{ij}=&lt;11,11,0&gt; L j l = &lt; 13 , 13 , 0 &gt; L_{jl}=&lt;13,13,0&gt;

關鍵路徑是完全不能拖延的,而其餘的非關鍵路徑,則會有一定的冗餘時間,現在從後往前開始計算最晚開始時間

  • l是結束里程碑,時間點為21,因此從l對應的非關鍵路徑(該例僅有 L k l L_{kl} )開始,逐步計算最晚開始時間:
  • L k l = &lt; ? , 18 ( 21 3 ) , ? &gt; L_{kl}=&lt;?,18(21-3),?&gt; L j k = &lt; ? , 16 ( 18 2 ) , ? &gt; L_{jk}=&lt;?,16(18-2),?&gt; L h k = &lt; ? , 14 ( 18 4 ) , ? &gt; L_{hk}=&lt;?,14(18-4),?&gt; L g h = &lt; ? , 11 ( 14 3 ) , ? &gt; L_{gh}=&lt;?,11(14-3),?&gt; L g j = &lt; ? , 11 ( 13 2 ) , ? &gt; L_{gj}=&lt;?,11(13-2),?&gt; L e g = &lt; ? , 8 ( 11 3 ) , ? &gt; L_{eg}=&lt;?,8(11-3),?&gt; L a e = &lt; ? , 4 ( 8 4 ) , ? &gt; L_{ae}=&lt;?,4(8-4),?&gt; L f h = &lt; ? , 13 ( 14 1 ) , ? &gt; L_{fh}=&lt;?,13(14-1),?&gt; L c f = &lt; ? , 10 ( 13 3 ) , ? &gt; L_{cf}=&lt;?,10(13-3),?&gt; L a c = &lt; ? , 5 ( 10 5 ) , ? &gt; L_{ac}=&lt;?,5(10-5),?&gt; L b i = &lt; ? , 5 ( 11 6 ) , ? &gt; L_{bi}=&lt;?,5(11-6),?&gt;

如果你認真計算了,可能會有以下問題:

  • L g j L_{gj} j向後連線兩個節點lk,使用哪個邊的最晚開始時間計算?

最後選擇了關鍵路徑 L j l L_{jl} 的最晚開始時間,因為jl是關鍵路徑,是不能耽誤的,而j里程碑的達成需要gjij兩個活動共同完成,gj的最晚開始時間的計算應該以jl的最晚開始時間點為基準來進行計算。

  • L a e L_{ae} L a c L_{ac} 的最早開始時間為什麼是不確定的?

實際是確定的,第一個節點相連的活動最早開始時間肯定是1,但是為了統一格式,專一計算最晚開始時間,所以我寫的是?

  • 接下來再次從前往後,計算非關鍵路徑的最早開始時間,同時因為所有活動的最晚開始時間確定,可以同時求出冗餘時間:
  • L a e = &lt; 1 , 4 , 3 &gt; L_{ae}=&lt;1,4,3&gt; L e g = &lt; 5 , 8 , 3 &gt; L_{eg}=&lt;5,8,3&gt; L g j = &lt; 7 , 11 , 4 &gt; L_{gj}=&lt;7,11,4&gt;