數據結構 拓撲排序、AOV 、AOE、關鍵路徑

AOV (Activity On Vertex) 活動在頂點上

AOV 網: 強調的是在一個完整的過程中,各個活動所發生的順序

其中用頂點表示活動,用弧表示活動之間的優先關係,例如:在 👆 圖中,活動 A 應該在活動 B 之前發生

把各個活動按照發生的先後順序進行排序就稱爲拓撲排序

而經過排序後形成的序列就稱爲拓撲序列

拓撲排序:下面是一個 AOV 網,進行拓撲排序(排序後的結果爲: 1 2 4 3 5)

1. 開始狀態爲上圖所示 👆:先觀察上圖,找到入度爲 0 的節點,從上圖看,發現節點 1 的入度爲 0

所以第一個選擇結果爲:1,然後進行圖的處理,將以節點 1 爲弧尾所指向的節點的弧去除,得到下面 👇 的圖

2. 再觀察上圖 👆,找到入度爲 0 的節點,發現節點 2 的入度爲 0,所以第二個選擇結果爲:2,然後進行圖的處理,將以節點 2 爲弧尾所指的節點的弧去除,得到下面 👇 的圖

3. 再觀察上圖 👆,找到入度爲 0 的節點,發現節點 4 的入度爲 0,所以第三個選擇結果爲:4,然後進行圖的處理,將以節點 4 爲弧尾所指的節點的弧去除,得到下面 👇 的圖

4. 再觀察上圖 👆,找到入度爲 0 的節點,發現節點 3 的入度爲 0,所以第四個選擇結果爲:3,然後進行圖的處理,將以節點 3 爲弧尾所指的節點的弧去除,得到下面 👇 的圖

5. 再觀察上圖 👆,找到入度爲 0 的節點,發現節點 5 的入度爲 0,所以第五個選擇結果爲:5,最後結束

AOE (Activity On Edge) 活動在邊上

AOE 網:在現代化管理中,人們常用有向圖來描述和分析一項工程的計劃和實施過程,一個工程常被分爲多個小的子工程,這些子工程被稱爲活動(Activity),在帶權有向圖中若以頂點表示事件,有向邊表示活動,邊上的權值表示該活動持續的時間

AOE 網性質

  1. 只有在某頂點所代表的事件發生後,從該頂點出發的各個有向邊所代表的活動才能開始
  2. 只有在進入某頂點的各有向邊所代表的活動都已經結束,該頂點所代表的事件才能發生

由上圖可以看到,造一個飛機的整個過程:從開始->組裝好,中間要經歷零件的製造好,集中好這些事件

活動:從開始到輪子造好這個弧就是一個造輪子的活動,注意活動是在邊上這個概念,由圖上可知,造輪子這個活動,耗時爲 2 天

而且可以通過觀察可以看出,整個造好一架飛機的總少耗時爲:5 + 1 + 2 = 8 天(圖中最長的一條從起點到終點的路徑),這個時間是怎麼來的呢?

首先,觀察在集中這個事件發生前,它前面的活動都要發生且結束,且由觀察可知,各個零件造好的集中活動所耗時的時間是一樣的,所以在集中事件的發生前的核心在各個零件製造的活動

從製造一塊來看,如果工期爲 2 天的話,造輪子、造機翼、造零件這三個活動可以完成,但是對於造機艙、造發動機這兩個活動只完成了一部分,此時集中好這個事件還不能發生,必須要等造機艙以及造發動機這兩個活動完成,然後再經過集中活動,才能發生集中好這個事件,所以最短的時間,應該是在製造活動中選擇所需製造時間最長的活動,也就是造發動機這個活動,總耗時 5 天,當發動機造好了,其他的零件自然也已經造好(這一點很重要!!!如果沒有造好的話,就不能同時抵達集中好這個事件,還會出現等待的情況,所以爲了使整個工程所耗時最短,在發動機造好了,其他的零件也必然已經造好

關鍵路徑:在這個圖中是指:開始->發送機造好->集中好->組裝好這個路徑

關鍵活動:在關鍵路徑上的每條弧,稱爲關鍵活動

關鍵活動的特點:關鍵活動的最早開始時間和最遲開始時間是一致的,怎麼理解這句話呢?請看下面 👇 的解釋:

對於製造這個環節,總時間給 5 天,也就是製造發動機這個活動所消耗的時間

對於造輪子的活動:最早開始時間爲: 0 天,最晚開始時間爲: 3 天
對於造機艙的活動:最早開始時間爲: 0 天,最晚開始時間爲: 2 天
對於造發動機的活動:最早開始時間爲: 0 天,最晚開始時間爲: 0 天
對於造機翼的活動:最早開始時間爲: 0 天,最晚開始時間爲: 3 天
對於造零件的活動:最早開始時間爲: 0 天,最晚開始時間爲: 4 天

從上述分析可知,製造發動機這個活動的最早開始時間和最晚開始時間相同,所以製造發動機這個活動屬於關鍵活動

舉個例子:

求上圖  👆 AOE 網的關鍵路徑?

首先求此 AOE 網 的拓撲序列得出每個事件發生的先後順序:V1 V2 V3 V4 V5 V6 V7 V8 V9

再求各事件最早發生時間(該事件的發生要滿足它的前驅事件全部完成,前驅事件是指在圖中弧指向該節點事件的節點,比如說:對於事件 V3,指向它的事件有 V1 和 V2,所以事件 V3 最早發生時間要等事件 V1 和 V2 全部完成
一個事件的最遲發生時間 = 它前一個事件的最早發生時間 + 指向該事件的弧 (活動) 的時間的最大值

解釋一下爲啥要最大值:因爲當事件 V3 最早發生的時候至少要等 V1 和 V2 這兩個事件全部完成了,所以 V3 的最早發生時間就應爲 max{V1 + a2, V2 + a5}
ve(i) 表示事件 i 發生的最早發生時間,則:

ve(1) = 0
ve(2) = 2
ve(3) = max{ve(1) + 5, ve(2) + 2} = 5
ve(4) = ve(2) + 3 = 5
ve(5) = max{ve(1) + 5, ve(3) + 1} = 6
ve(6) = max{ve(3) + 3, ve(4) + 2} = 8
ve(7) = max{ve(5) + 6, ve(6) + 3} = 12
ve(8) = ve(6) + 4 = 12
ve(9) = max{ve(7) + 4, ve(8) + 2} = 16

再求各事件最遲發生時間(不能推遲其後事件的最遲發生時間)
一個事件的最遲發生時間 = 它後一個事件的最遲發生時間 - 這個事件指向它後一個事件的弧 (活動) 的時間的最小值

解釋一下爲啥要最小值:最小值也就是說當前的事件它最晚是什麼時間開始,拿事件 V6 舉例子,V7 的最晚發生時間爲 12,V8的最晚發生時間爲 14,那麼 V6 最晚到什麼時間開始才能經過活動 a11 到達 V7, 經過活動 a10 到達 V8 呢,當然是選擇這兩個事件分別減去各自弧(活動)所花費的時間的最小值了,如果不是最小值的話,V7 - a11 = 9, V8 - a13 = 10,選擇 10 點最爲最遲發生時間,那麼 10 + a11 = 13 ,這個 13 比 V7 事件的最遲發生時間還要向後延遲,那麼鐵定 V7 是完成不了的了,所以明白了嗎?
vl(i) 表示事件 i 發生的最遲時間

節點 1 和 節點 9 分別爲路徑的起點和終點,所以它倆一定在關鍵路徑上,又因爲關鍵路徑上的節點的最早發生時間和最遲發生時間是相同的,那麼就可以根據上面求的最早的發生時間 ve(9) = 16,得出 vl(9) = ve(9) = 16,那麼從後往前推,則可以依次得到其他事件的最遲發生時間

vl(9) = ve(9) = 16
vl(8) = vl(9) - 2 = 14
vl(7) = vl(9) - 4 = 12
vl(6) = min{vl(8) - 4, vl(7) - 3} = 9
vl(5) = vl(7) - 6 = 6
vl(4) = vl(6) - 2 = 7
vl(3) = min{vl(6) - 3, vl(5) - 1} = 5
vl(2) = min{vl(4) - 3, vl(3) - 2} = 3
vl(1) = min{vl(5) - 5, vl(3) - 5, vl(2) - 2} = 0

現在開始求各活動最早發生時間
活動最早發生時間 = 活動的弧尾的事件的最早發生時間,所以:

e(a1) = e(a2) = e(a3) = ve(1) = 0
e(a4) = e(a5) = ve(2) = 2
e(a6) = e(a7) = ve(3) = 5
e(a8) = ve(4) = 5
e(a9) = ve(5) = 6
e(a10) = e(a11) = ve(6) = 8
e(a12) = ve(7) = 12
e(a13) = ve(8) = 12

現在求各活動最遲發生時間
活動的最遲發生時間 = 活動的弧頭所指向的事件的最遲發生時間 - 這個活動所消耗的時間

l(a1) = vl(2) - 2 = 1
l(a2) = vl(3) - 5 = 0
l(a3) = vl(5) - 5 = 1
l(a4) = vl(4) - 3 = 4
l(a5) = vl(3) - 2 = 3
l(a6) = vl(5) - 1 = 5
l(a7) = vl(6) - 3 = 6
l(a8) = vl(6) - 2 = 7
l(a9) = vl(7) - 6 = 6
l(a10) = vl(8) - 4 = 10
l(a11) = vl(7) - 3 = 9
l(a12) = vl(9) - 4 = 12
l(a13) = vl(9) - 2 = 14 

最後對比活動的最早發生時間和最遲發生時間,找到兩個時間相同的活動,則爲關鍵活動,由這些關鍵活動構成的路徑則爲關鍵路徑

由上圖可以查看出關鍵活動爲:a2 a6 a9 a12

在圖中畫出來就是下面 👇 的結果:

本篇文章到這裏就結束了,可能這篇文章講的還不夠好,或者有錯誤的地方,歡迎在下方進行留言,我看到會加以修正,互相學習,共同進步,加油!(●'◡'●)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章