資料結構與演算法12 拓撲排序和關鍵路徑

2022-03-07 02:05:23 字數 3330 閱讀 4246

有向無環圖及其應用

乙個無環的有向圖稱做有向無環圖,簡稱dag圖。

dag圖是一類較有向樹更一般的特殊有向圖。

拓撲排序

通常我們把計畫、施工過程、生產流程、程式流程等都當成乙個工程,乙個大的工程常常被劃分成許多較小的子工程,這些子工程稱為活動。這些活動完成時,整個工程也就完成了。

,計算機專業學生的課程開設可看成是乙個工程,每一門課程就是工程中的活動。

頂點表示活動,有向邊表示活動的先後關係的網簡稱為aov網

aov網中不能有環,否則工程無法順利進行。

在aov網中,若不存在迴路,則所有活動可排成乙個線性序列,使得每個活動的所有前驅活動都排在該活動的前面,我們把此序列叫做拓撲序列(topological order),由aov網構造拓撲序列的過程叫做拓撲排序(topological sort)。

如何進行拓撲排序?

對aov網進行拓撲排序的方法是:

① 在aov網中選擇乙個入度為0的頂點,並輸出它到拓撲序列中;

② 從網中刪去該頂點及它的所有出邊;

反覆執行①②兩步,直到網中所有頂點都被輸出了(拓撲序列完成),或網的剩餘部分中再也選不出入度為0的頂點(圖中有環)為止。

例:對下列aov網進行拓撲排序。

拓撲排序演算法(鄰接矩陣)

aoe網與關鍵路徑

一、aoe網概念

1.定義 若在帶權的有向圖中,以頂點表示事件,有向邊表示活動,邊上的權值表示完成該活動的開銷(如該活動所需的時間),則稱此帶權的有向圖為用邊表示活動的網路,簡稱aoe網(activity on edge)

2.說明 (1) aov網與aoe網有密切關係又有不同。如果用他們表示工程,aov網表示各個子工程之間的優先關係,是定性關係;在aoe網中還要體現完成各個子工程的確切時間,是定量關係。

整個工程完成的時間為:從有向圖的源點到匯點的最長路徑。

「關鍵活動」指的是:該弧上的權值增加 將使有向圖上的最長路徑的長度增加。

對於aoe網,我們關心的問題是:

(a)完成整個工程至少需要多少時間?

(b)哪些活動是關鍵活動:哪些活動的進度是影響整個工程進度的關鍵?

(2)在aoe網中,只有在某頂點所代表的事件發生後,從該頂點出發的各有向邊所代表的活動才能開始。只有在進入每頂點的各有向邊所代表的活動都已經結束後,該頂點所代表的事件才能發生。

(3)在乙個表示工程的aoe網中,應該不存在迴路,網中僅存在乙個入度為零的頂點,乘作開始頂點,它表示了整個工程的開始;網中僅存在乙個出度為零的頂點,稱為結束頂點,它表示整個工程的結束。

二、關鍵路徑有關術語

1.路徑長度

aoe網中一條路徑的長度是該路徑上個活動所需時間的總和。

2.關鍵路徑

aoe網中,從開始頂點到結束頂點之間路徑長度中的最大路徑為關鍵路徑。由於aoe網中某些子工程(活動)可以同時進行,要保證每個子工程都能完成,完成該工程的最少時間就是該工程aoe網的關鍵路徑長度。

3.事件的最早發生時間

事件vi的最早發生時間ve(i)是從開始頂點v到vi的最長路徑長度。

4.活動的最早開始時間

活動aj的最早開始時間e (j)是該活動的起點所表示的事件最早發生時間,如果由邊(vi,vk)表示活動aj,則有e(j)=ve(i)。

5.事件的最遲發生時間

事件vk的最遲發生時間vl(k)是在不推遲整個工程完成(即保證結束頂點vn在ve(n)時刻發生)的前提下,該事件最遲必須發生的時間。vl(k)為ve(n)減去頂點vk到結束頂點vn的最長路徑的長度.

6.活動的最遲開始時間

活動aj的最遲開始時間l(j)是該活動的終點所表示的事件最遲發生時間與該活動的所需時間之差。如果由邊(vi,vk)表示活動aj,則有 l(j)=vl(k)-aj所需時間.

7.時間餘量

活動aj的 l(j)-e(j)是該活動完成的時間餘量。它是在不增加完成整個工程所需時間的情況下,活動aj可以拖延的時間。

8.關鍵活動

當一活動的時間餘量=0,說明該活動必須如期完成,否則就會拖延完成整個工程的進度。若活動aj的時間餘量=0,則稱該活動為關鍵活動。當時間餘量》0,活動aj不是關鍵活動,只要拖延的時間不超過時間餘量,就不會影響整個工程的進度;但如果拖延的時間超過時間餘量,則關鍵活動就可能發生變化。

一、計算事件的最早發生時間ve(k)

二、計算事件的最遲發生時間vl(k)

三、計算活動ai的最早開始時間e[i] 若活動ai有邊表示,則活動ai的最早開始時間e[i]可由下式計算: e[i]=ve[j]

四、計算活動ai的最遲開始時間l[i] 若活動ai有邊表示,則活動ai的最遲開始時間l[i]可由下式計算: l[i]=vl[k]-

五、計算活動ai的時間餘量d[i]確定關鍵路徑 令d[i]=l[i]-e[i],對於活動ai,若有d[i]=0,則說明活動ai為關鍵活動,由關鍵活動組成的路徑就是關鍵路徑。

對於aoe網,我們所關心的有兩個問題:

1、完成整個工程的時間可由ee[n]求得

2、關鍵活動(哪些活動的進度是影響整個工程進度的關鍵)

資料結構 拓撲排序演算法

簡單地說,由某個集合上的乙個偏序得到該集合上的乙個全序,這個操作稱之為拓撲排序。偏序 只有部分可以比較關係 全序 全部都能比較關係 aov網 用頂點表示活動,用弧表示活動間的優先關係的有向圖稱為頂點表示活動的網。在aov網中,不應該出現有向環,因為存在環意味著某項活動應以自己為先決條件。對給定的ao...

資料結構與演算法11 拓撲排序

資料結構與演算法11 拓撲排序 拓撲排序是指在乙個aov網路 中找到一種節點的排序序列,使得序列中的任意乙個節點在它的所有前置節點的後面,滿足aov所表示的依賴關係,這樣的乙個序列就叫拓撲序列。而尋找這樣乙個序列的過程叫拓撲排序。拓撲排序往往不是唯一的,可能存在多種滿足同乙個aov網路的拓撲序列。一...

Python 資料結構與演算法 拓撲排序

幾乎在所有的專案,甚至日常生活,待完成的不同任務之間通常都會存在著某些依賴關係,這些依賴關係會為它們的執行順序行程表部分約束。對於這種依賴關係,很容易將其表示成乙個有向無環圖 directed acyclic graph,dag,無環是乙個重要條件 並將尋找其中依賴順序的過程稱為拓撲排序 topol...