拓撲排序(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...