视频字幕
拓撲排序是圖論中的一個重要概念。它針對有向無環圖,也就是DAG,提供了一種頂點的線性排序方法。這種排序保證了對於圖中的任意一條有向邊,起始頂點總是出現在目標頂點之前。這在任務調度和依賴關係處理中非常有用。
拓撲排序使用深度優先搜尋演算法來實現。首先對有向無環圖執行DFS,計算每個頂點的完成時間。當一個頂點及其所有後繼節點都被訪問完畢時,我們記錄它的完成時間,並將其插入到結果列表的前端。最終按完成時間降序排列的頂點序列就是拓撲排序的結果。
現在讓我們看看DFS的具體執行過程。從頂點A開始,DFS會遞歸地訪問所有可達的頂點。黃色表示正在訪問的頂點,綠色表示已經完成訪問的頂點。當一個頂點的所有鄰接頂點都被訪問完畢後,該頂點就完成了,我們記錄它的完成時間。
現在我們根據DFS得到的完成時間來生成拓撲排序。將所有頂點按照完成時間降序排列:A的完成時間是8,B是7,D是6,C是4,E是3,F是1。因此拓撲排序的結果是A、B、D、C、E、F。我們可以驗證這個排序滿足拓撲排序的要求:對於每條有向邊,起始頂點都出現在目標頂點之前。
拓撲排序演算法的時間複雜度是Θ(V+E),其中V是頂點數,E是邊數,主要由DFS決定。空間複雜度是O(V),用於存儲DFS的狀態和結果。拓撲排序在實際應用中非常廣泛,包括任務調度系統、編譯器的依賴分析、課程安排問題和專案管理等領域。它為解決具有依賴關係的排序問題提供了高效的解決方案。