
【計】 topological ordering; topological sort; topological sorting
拓撲排序(Topological Sorting)是一種對有向無環圖(Directed Acyclic Graph, DAG)的頂點進行線性排序的算法,其核心要求是:對于圖中的每一條有向邊 ( u to v ),在排序結果中頂點 ( u ) 必須出現在頂點 ( v ) 之前。這種排序反映了頂點間的依賴關系,常用于任務調度、編譯順序确定等場景。
圖的性質要求
拓撲排序僅適用于有向無環圖(DAG)。若圖中存在環,則無法找到滿足所有邊方向的線性序列。例如,若存在 ( A to B ) 和 ( B to A ) 的環,則無法确定 ( A ) 與 ( B ) 的先後順序。
偏序到全序的轉化
拓撲排序将頂點間的偏序關系(Partial Order)轉化為全序關系(Total Order)。在偏序中,并非所有頂點都需直接比較;而在全序中,所有頂點需按依賴關系嚴格排列。
拓撲排序可通過以下兩種經典方法實現:
Kahn算法(基于入度)
來源:Kahn, A.B. (1962). "Topological sorting of large networks".
基于DFS的算法
來源:Cormen, T.H. et al. (2009). "Introduction to Algorithms"(《算法導論》)。
任務調度
在項目管理中,拓撲排序可确定任務執行順序,确保前置任務先于依賴任務完成。例如,編譯系統中源文件的編譯順序需滿足頭文件依賴關系。
課程安排
大學課程需按先修關系排序,如學生需修完《高等數學》才能學習《數據結構》。
數據流分析
在編譯器優化中,拓撲排序用于确定基本塊(Basic Block)的執行順序,以支持數據依賴分析。
中文術語 | 英文術語 |
---|---|
拓撲排序 | Topological Sorting |
有向無環圖 | Directed Acyclic Graph (DAG) |
入度 | In-degree |
偏序關系 | Partial Order |
深度優先搜索 | Depth-First Search (DFS) |
拓撲排序是圖論中的一種算法,專用于處理有向無環圖(DAG)。它的核心目标是将圖中的所有頂點排列成一個線性序列,使得對于圖中的任意一條有向邊 (u to v),頂點 (u) 在序列中始終位于頂點 (v) 的前面。這種排序反映了頂點之間的依賴關系。
依賴關系
拓撲排序適用于存在“先後順序”的場景。例如:
有向無環圖(DAG)
圖中不能存在循環依賴,否則無法進行拓撲排序。例如,若任務A依賴任務B,同時任務B又依賴任務A,則形成環,此時無解。
初始化
統計每個頂點的入度(即指向該頂點的邊數)。
選擇起點
将所有入度為0的頂點加入隊列(或列表),這些頂點沒有前置依賴。
疊代移除
依次取出隊列中的頂點:
終止條件
重複上述過程直到隊列為空。若結果序列包含所有頂點,則排序成功;否則,圖中存在環,無法排序。
假設有課程依賴關系:
拓撲排序結果為:A → B → C。
若存在多個入度為0的頂點(如A和D同時無依賴),則排序結果不唯一(如A → D → B → C 或 D → A → B → C)。
通過拓撲排序,可以高效解決依賴關系中的順序問題,但需确保圖中無環。
白肺被控整流器變換的指示財務貿易制度車葉草打動酚磺酸銀腐蝕裕度複位輸入坩埚用三角共濟失調性表情不能合理的價格檢察當局結核菌素X金尼氏定律賴塞爾特反應兩性者林産錨地依賴細胞腦糖輕松的求婚者色譜床蛇管夾套設陷阱時間定向十九烷醇使流産的推力平衡裝置頑強便秘