一、AOV網算法
定義:在一個表示工程的有向圖中,用頂點表示活動,用弧表示活動之間的優先關係,這樣的有向圖爲頂點表示活動的網,咱們成爲AOV網(Activity On Vertex Network),AOV網中的弧表示活動之間的某種約束關係。AOV網中不存在迴路(即無環的有向圖)。數據結構
拓撲排序排序
定義:設G(V,E)是一個具備n個頂點的有向圖,V中的頂點序列v1,v2,.....,vn,知足若從頂點vi到vj有一條路徑,則頂點vi必在vj以前。這樣的頂點序列成爲拓撲序列。事件
拓撲排序其實就是對一個有向圖構造拓撲序列的過程。it
對AOV網進行拓撲排序的基本思路是:從AOV網中選擇一個入度爲0的頂點輸出,而後從有向圖中刪除該定點,並刪除以此頂點爲尾的弧,繼續重複此步驟,直到輸出所有頂點或AOV網中不存在入度爲0的頂點爲止。ast
拓撲排序使用鄰接表的數據結構。還用棧做爲輔助數據結構,用來存儲處理過程當中入度爲0的頂點,目的是爲了不每次查找時都要去遍歷鄰接表找有沒有入度爲0的頂點。test
對一個具備n個頂點e條弧的AOV網來講,時間複雜度爲O(n+e).基礎
二、AOE網遍歷
定義:在一個表示工程的帶權有向圖中,用頂點表示事件,用弧表示活動,用弧上的權值表示活動持續的時間,這種有向圖的弧表示活動的網,咱們稱爲AOE網(Activity On Edge Network).AOE網中沒有入度的頂點稱爲始點或源點,沒有出度的頂點叫作終點或匯點。im
AOV網和AOE網的不一樣:
它們都是用來對工程建模的,但它們仍是有很大的區別,主要體如今AOV網是頂點表示活動的網,它只描述了活動之間的約束關係,而AOE網是用有向邊表示活動,邊上的權值表示活動持續的時間。AOE網是創建在AOV網基礎之上(活動之間約束關係沒有矛盾),再來分析完成整個工程至少須要多少時間,或者爲縮短完成工程所需時間,應當加快那些活動等問題。
路徑各個活動所持續的時間之和稱爲路徑長度,從源點到匯點具備最大路徑長度的路徑叫作關鍵路徑,在關鍵路徑上的活動叫作關鍵活動。
關鍵路徑的幾個參數:
(1)、事件的最先發生時間etv(earliest time of vertex):即頂點Vk的最先發生時間。
(2)、事件的最晚發生時間ltv(lastest time of vertex):即頂點Vk的最晚發生時間。也就是每一個頂點對應事件最晚須要開始的時間,超出此時間將會延誤整個工程。
(3)、活動的最先開始時間ete(earliset time of edge):即弧ak的最先開始時間。
(4)、活動的最晚開始時間lte(lastest time of edge):即弧ak的最晚開始時間,也就是不推遲工期的最晚開始時間。
AOE網也用鄰接表結構,與AOV網鄰接表不一樣的是,AOE網的鄰接表中增長了weight域,用來存儲弧的權值。
計算頂點Vk的最先發生時間etv[k]的公式是:
計算頂點Vk的最晚開始時間ltv[k]的公式:
ete表示活動<Vk,Vj>的最先開始時間,是針對弧來講的。但只有此弧的弧尾頂點Vk的事件發生了,它纔開始,所以ete = etv[k];即以Vk爲弧尾的弧(活動)的最先開始時間ete等於弧尾頂點Vk的最先開始時間etv[k]。
lte表示活動<Vk,Vj>的最晚開始時間,但此活動最晚也不能等到Vj(頂點)事件發生纔開始,而必須在Vj事件以前發生,因此lte = ltv[j]-len<Vk,Vj>。
當ete與lte相等時,此活動爲關鍵活動。
求關鍵路徑的算法時間複雜度爲O(n+e),n個頂點e條邊的有向無環圖。
注意:有向無環圖的關鍵路徑不必定只有一條,也能夠有多條。若是有多條關鍵路徑,則單單提升一條關鍵路徑上的關建活動的速度並不能致使整個工期的縮短,而是必須是提升同時在幾條關鍵路徑上的活動的速度。