資料結構之拓撲排序

2022-08-26 15:45:19 字數 656 閱讀 2556

**:

原理:該演算法的實現十分直觀,關鍵在於需要維護乙個入度為0(沒有入)的頂點的集合:

每次從該集合中取出(沒有特殊的取出規則,隨機取出也行,使用佇列/棧也行,下同)乙個頂點,將該頂點放入儲存結果的list中。

緊接著迴圈遍歷由該頂點引出的所有邊,從圖中移除這條邊,同時獲取該邊的另外乙個頂點,如果該頂點的入度在減去本條邊之後為0,那麼也將這個頂點放到入度為0的集合中。然後繼續從集合中取出乙個頂點…………

當集合為空之後,檢查圖中是否還存在任何邊,如果存在的話,說明圖中至少存在一條環路。不存在的話則返回結果list,此list中的順序就是對圖進行拓撲排序的結果。

例如:對上圖進行拓撲排序的結果:

2->8->0->3->7->1->5->6->9->4->11->10->12

複雜度分析:

初始化入度為0的集合需要遍歷整張圖,檢查每個節點和每條邊,因此複雜度為o(e+v);

然後對該集合進行操作,又需要遍歷整張圖中的,每條邊,複雜度也為o(e+v);

因此kahn演算法的複雜度即為o(e+v)。

個人理解:首先確定入讀為0 的節點,去除該點和有關聯的邊,然後依次執行上步驟,當集合為空之後,檢查圖中是否還存在任何邊,如果存在的話,說明圖中至少存在一條環路。不存在的話則返回結果list,此list中的順序就是對圖進行拓撲排序的結果。

資料結構之拓撲排序

乙個簡單的求拓撲排序思路是 先找出任意乙個沒有入邊的頂點。然後列印出該頂點,並將它和它的邊一起從圖中刪除。然後,我們對圖的其餘部分採用同樣的方法處理。相應的我們可以定義乙個indegree 入度陣列 儲存所有頂點的入度。具體實現如下 鄰接表 define crt secure no warnings...

資料結構之拓撲排序

拓撲排序 topological order 是指,將乙個有向無環圖 directed acyclic graph簡稱dag 進行排序進而得到乙個有序的線性序列。這樣說,可能理解起來比較抽象。下面通過簡單的例子進行說明!例如,乙個專案包括a b c d四個子部分來完成,並且a依賴於b和d,c依賴於d...

資料結構之拓撲排序

感覺重點就是鄰接表的建立和tp toposort 函式中的乙個變數 的變化很奇妙,相當於是乙個靜態指標的用法。include include include include include include include include include define inf 0x3f3f3f3f d...