日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

判断图有无环_浅谈什么是图拓扑排序

發布時間:2023/12/10 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 判断图有无环_浅谈什么是图拓扑排序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 引言

??在工程實踐中,一個工程項目往往由若干個子項目組成。這些子項目間往往有兩種關系:
??(1) 先后關系,即必須在某個項完成后才能開始實施另一個子項目。
??(2) 子項目間無關系,即兩個子項目可以同時進行,互不影響。

??例如:在工廠里產品的生產線上,一個產品由若干個零部件組成。零部件生產時,也存在這兩種關系:
??(1)先后關系,即一個部件必須在完成后才能生產另一個部件;
??(2)部件間無先后關系,即這兩個部件可以同時生產。
??那么如何合理的分配資源才能保證工程能夠按時完成呢?將任務作為圖的頂點,將任務之間的依賴關系作為圖的邊,這樣就可以將實際問題抽象為數據結構圖論中的典型問題——圖的拓撲排序。

2 重要概念

??有向無環圖(Directed Acyclic Graph, DAG)是有向圖的一種,字面意思的理解就是圖中沒有環。常常被用來表示事件之間的驅動依賴關系,管理任務之間的調度。AOV網:在每一個工程中,可以將工程分為若干個子工程,這些子工程稱為活動。如果用圖中的頂點表示活動,以有向圖的弧表示活動之間的優先關系,這樣的有向圖稱為AOV網,即頂點表示活動的網。在AOV網中,如果從頂點vi到頂點j之間存在一條路徑,則頂點vi是頂點vj的前驅,頂點vj是頂點vi的后繼。活動中的制約關系可以通過AOV網中的表示。 在AOV網中,不允許出現環,如果出現環就表示某個活動是自己的先決條件。因此需要對AOV網判斷是否存在環,可以利用有向圖的拓撲排序進行判斷。拓撲序列:設G=(V,E)是一個具有n個頂點的有向圖,V中的頂點序列v1,v2,…,vn,滿足若從頂點vi到vj有一條路徑,則在頂點序列中頂點vi必在vj之前,則我們稱這樣的頂點序列為一個拓撲序列。拓撲排序:拓撲排序是對一個有向圖構造拓撲序列的過程。

3 拓撲排序

??拓撲排序(Topological Sorting)是一個有向無環圖(DAG, Directed Acyclic Graph)的所有頂點的線性序列。且該序列必須滿足下面兩個條件:
??(1)每個頂點出現且只出現一次。
??(2)若存在一條從頂點 A 到頂點 B 的路徑,那么在序列中頂點 A 出現在頂點 B 的前面。
??注:有向無環圖(DAG)才有拓撲排序,非DAG圖沒有拓撲排序一說。

4 入度表法

??入度表法是根據頂點的入度來判斷是否存在依賴關系。若頂點入度不為0。則必然此頂點的事件有前驅依賴事件,因此每次選取入度為0的頂點輸出,則符合拓撲排序的性質。

4.1 算法流程

(1)從圖中選擇一個入度為0的頂點,輸出該頂點。
(2)從圖中刪除該節點及其所有出邊(即與之鄰接的所有頂點入度-1)
(3)反復執行這兩個步驟,直至所有節點都輸出,即整個拓撲排序完成;或者直至剩下的圖中再沒有入度為0的節點,這就說明此圖中有回路,不可能進行拓撲排序。

4.2 實例圖解

例如:圖4.2.1所示的有向無環圖,采用入度表的方法獲取拓撲排序過程。

4.2.1
(1)選擇圖中入度為0的頂點1,輸出頂點1。刪除頂點1,并刪除以頂點1為尾的邊。刪除后圖為:
(2)繼續選擇入度為0的頂點。現在,圖中入度為0的頂點有2和4,這里我們選擇頂點2,輸出頂點2。刪除頂點2,并刪除以頂點2為尾的邊。刪除后圖為:
(3)選擇入度為0的頂點4,輸出頂點4.刪除頂點4,并刪除以頂點4為尾的邊。刪除后圖為:
(4)選擇入度為0的頂點3,輸出頂點3.刪除頂點3,并刪除以頂點3為尾的邊。刪除后圖為:
(5)最后剩余頂點5,輸出頂點5,拓撲排序過程結束。最終的輸出結果為:

4.3 性能分析

??算法時間復雜度分析:統計所有節點入度的時間復雜性為(VE);接下來刪邊花費的時間也是(VE),總花費時間為O(VE)。若使用隊列保存入度為0的頂點,則可以將這個算法復雜度將為O(V+E)。

5 DFS方法

??深度優先搜索過程中,當到達出度為0的頂點時,需要進行回退。在執行回退時記錄出度為0的頂點,將其入棧。則最終出棧順序的逆序即為拓撲排序序列。

5.1 算法流程

(1)對圖執行深度優先搜索。
(2)在執行深度優先搜索時,若某個頂點不能繼續前進,即頂點的出度為0,則將此頂點入棧。
(3)最后得到棧中順序的逆序即為拓撲排序順序。

5.2 實例圖解

例如圖5.2.1所示的有向無環圖,采用DFS的方法獲取拓撲排序過程。

5.2.1
(1)選擇起點為頂點1,,開始執行深度優先搜索。順序為1->2->3->5。
(2)深度優先搜索到達頂點5時,頂點5出度為0。將頂點5入棧。
(3)深度優先搜索執行回退,回退至頂點3。此時頂點3的出度為0,將頂點3入棧。
(4)回退至頂點2,頂點2出度為0,頂點2入棧。
(5)回退至頂點1,頂點1可以前進位置為頂點4,順序為1->4。
(6)頂點4出度為0,頂點4入棧。
(7)回退至頂點1,頂點1出度為0,頂點1入棧。
(8)棧的逆序為1->4->2->3->5。此順序為拓撲排序結果。

5.3 性能分析

??時間復雜度分析:首先深度優先搜索的時間復雜度為O(V+E),而每次只需將完成訪問的頂點存入數組中,需要O(1),因而總復雜度為O(V+E)。

推薦閱讀

拜托,面試官別問我「布隆」了

有點難度,幾道和「滑動窗口」有關的算法面試題

數據結構與算法:三十張圖弄懂「圖的兩種遍歷方式」

昨天,終于拿到了騰訊 offer

幾道和「二叉樹」有關的算法面試題

幾道和散列(哈希)表有關的面試題

一道看完答案你會覺得很沙雕的「動態規劃算法題」

幾道和「堆棧、隊列」有關的面試算法題

鏈表算法面試問題?看我就夠了!

我就知道你在看! 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的判断图有无环_浅谈什么是图拓扑排序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。