Python 資料結構與演算法 拓撲排序

2021-09-28 06:25:22 字數 996 閱讀 8386

幾乎在所有的專案,甚至日常生活,待完成的不同任務之間通常都會存在著某些依賴關係,這些依賴關係會為它們的執行順序行程表部分約束。對於這種依賴關係,很容易將其表示成乙個有向無環圖(directed acyclic graph,dag,無環是乙個重要條件),並將尋找其中依賴順序的過程稱為拓撲排序(topological sorting)。

dag 分析

歸簡法解 dag

歸簡法求解拓撲排序,第一直覺是先移除其中乙個節點(後面會說,每次移除的都是當前拓撲結構中的入度為零的點,入度為 0 的含義不依賴其他任何節點,即可發生),然後解決其餘 n-1 個節點的問題。

def topsort(g):

in_degrees = dict((u, 0) for u in g)

for u in g:

for v in g[u]:

in_degrees[v] += 1 # 每乙個節點的入度

q = [u for u in g if in_degrees[u] == 0] # 入度為 0 的節點

s =

while q:

u = q.pop() # 預設從最後乙個移除

for v in g[u]:

count[v] -= 1# 並移除其指向

if count[v] == 0:

return s

對上圖而言,我們使用鄰接表的dict 形式進行表示:

g = 

print(topsort(g))

>>> ['a', 'b', 'c', 'd', 'e', 'f']

資料結構與演算法11 拓撲排序

資料結構與演算法11 拓撲排序 拓撲排序是指在乙個aov網路 中找到一種節點的排序序列,使得序列中的任意乙個節點在它的所有前置節點的後面,滿足aov所表示的依賴關係,這樣的乙個序列就叫拓撲序列。而尋找這樣乙個序列的過程叫拓撲排序。拓撲排序往往不是唯一的,可能存在多種滿足同乙個aov網路的拓撲序列。一...

資料結構 拓撲排序演算法

簡單地說,由某個集合上的乙個偏序得到該集合上的乙個全序,這個操作稱之為拓撲排序。偏序 只有部分可以比較關係 全序 全部都能比較關係 aov網 用頂點表示活動,用弧表示活動間的優先關係的有向圖稱為頂點表示活動的網。在aov網中,不應該出現有向環,因為存在環意味著某項活動應以自己為先決條件。對給定的ao...

資料結構與演算法學習 拓撲排序

乙個表示工程的有向圖中,用定點表示活動,用弧表示活動之間的優先關係,這樣的有向圖為頂點表示活動的網,稱之為aov網。類似於分支流程圖 aov網不存在環。且各頂點有先後順序。aov網輸出所有頂點,並且順序必須按弧的順序 就是按層來輸出全部頂點 這樣的頂點序列稱為拓撲序列。aov網的拓撲序列並不只有一條...