拓普排序介紹

2021-07-08 16:47:23 字數 1287 閱讀 5105

拓撲排序(topological order)是指,將乙個有向無環圖(directed acyclic graph簡稱dag)進行排序進而得到乙個有序的線性序列。

這樣說,可能理解起來比較抽象。下面通過簡單的例子進行說明! 

例如,乙個專案包括a、b、c、d四個子部分來完成,並且a依賴於b和d,c依賴於d。現在要制定乙個計畫,寫出a、b、c、d的執行順序。這時,就可以利用到拓撲排序,它就是用來確定事物發生的順序的。

在拓撲排序中,如果存在一條從頂點a到頂點b的路徑,那麼在排序結果中b出現在a的後面。

拓撲排序演算法的基本步驟:

1.構造乙個佇列q(queue) 和 拓撲排序的結果佇列t(topological); 

2.把所有沒有依賴頂點的節點放入q; 

3.當q還有頂點的時候,執行下面步驟: 

3.1從q中取出乙個頂點n(將n從q中刪掉),並放入t(將n加入到結果集中); 

3.2對n每乙個鄰接點m(n是起點,m是終點); 

3.2.1去掉邊; 

3.2.2如果m沒有依賴頂點,則把m放入q; 

注:頂點a沒有依賴頂點,是指不存在以a為終點的邊。

以上圖為例,來對拓撲排序進行演示。

第1步:將b和c加入到排序結果中。 

頂點b和頂點c都是沒有依賴頂點,因此將c和c加入到結果集t中。假設abcdefg按順序儲存,因此先訪問b,再訪問c。訪問b之後,去掉邊和,並將a和d加入到佇列q中。同樣的,去掉邊和,並將f和g加入到q中。 

(01) 將b加入到排序結果中,然後去掉邊和;此時,由於a和d沒有依賴頂點,因此並將a和d加入到佇列q中。 

(02) 將c加入到排序結果中,然後去掉邊和;此時,由於f有依賴頂點d,g有依賴頂點a,因此不對f和g進行處理。 

第2步:將a,d依次加入到排序結果中。 

第1步訪問之後,a,d都是沒有依賴頂點的,根據儲存順序,先訪問a,然後訪問d。訪問之後,刪除頂點a和頂點d的出邊。 

第3步:將e,f,g依次加入到排序結果中。

因此訪問順序是:b -> c -> a -> d -> e -> f -> g

拓撲排序是對有向無向圖的排序。下面以鄰接表實現的有向圖來對拓撲排序進行說明。

拓拔排序演算法

一 定義 拓撲排序是對有向無迴路圖 dag 頂點的一種排序,它使得如果存在從u到v的有向路徑,那麼滿足序列中u在v前。例如 來自於某牛 最後變成 所以我們的演算法可以描述為這樣乙個過程 1 找到整個圖中所有的原點,將這些點壓進佇列 棧 中 2 從佇列 棧 中取出一點,輸出,將該點及它的邊刪除,找到它...

微粒貸以「普惠金融」為目標 把普惠金融之路越拓越寬

微眾銀行自成立以來始終嚴格遵守國家金融法律法規和監管政策,以合規經營和穩健發展為基礎,致力於為普羅大眾 小微企業提供差異化 有特色 優質便捷的金融服務,走出一條獨具特色的 普惠金融 之路。微粒貸是微眾銀行推出的首款銀行小額信貸產品,於 2015 年 5程式設計客棧 月正式上線,具有方便快捷普惠的亮點...

9月24號面試總結(康拓普1面)

2.常用資料庫優化 varchar可以建索引嗎 mysql的btree索引和hash索引的區別 varchar型別資料可以建索引 3.常用資料庫表 4.hashmap遍歷的方式 1.通過map.keyset 遍歷key和value 2.map.entryset使用iterator遍歷key和valu...