Python關于拓撲排序知識點講解
對一個有向無環(huán)圖(Directed Acyclic Graph簡稱DAG)G進行拓撲排序,是將G中所有頂點排成一個線性序列,使得圖中任意一對頂點u和v,若邊(u,v)∈E(G),則u在線性序列中出現(xiàn)在v之前。
通常,這樣的線性序列稱為滿足拓撲次序(Topological Order)的序列,簡稱拓撲序列。簡單的說,由某個集合上的一個偏序得到該集合上的一個全序,這個操作稱之為拓撲排序。
在圖論中,由一個有向無環(huán)圖的頂點組成的序列,當且僅當滿足下列條件時,稱為該圖的一個拓撲排序(英語:Topological sorting):
- 每個頂點出現(xiàn)且只出現(xiàn)一次;
- 若A在序列中排在B的前面,則在圖中不存在從B到A的路徑。
實例代碼
from collections import defaultdict class Graph: def __init__(self,vertices): self.graph = defaultdict(list) self.V = vertices def addEdge(self,u,v): self.graph[u].append(v) def topologicalSortUtil(self,v,visited,stack): visited[v] = True for i in self.graph[v]: if visited[i] == False: self.topologicalSortUtil(i,visited,stack) stack.insert(0,v) def topologicalSort(self): visited = [False]*self.V stack =[] for i in range(self.V): if visited[i] == False: self.topologicalSortUtil(i,visited,stack) print (stack) g= Graph(6) g.addEdge(5, 2); g.addEdge(5, 0); g.addEdge(4, 0); g.addEdge(4, 1); g.addEdge(2, 3); g.addEdge(3, 1); print ("拓撲排序結果:") g.topologicalSort()
執(zhí)行以上代碼輸出結果為:
拓撲排序結果:
[5, 4, 2, 3, 1, 0]
實例擴展:
def toposort(graph): in_degrees = dict((u,0) for u in graph) #初始化所有頂點入度為0 vertex_num = len(in_degrees) for u in graph: for v in graph[u]: in_degrees[v] += 1 #計算每個頂點的入度 Q = [u for u in in_degrees if in_degrees[u] == 0] # 篩選入度為0的頂點 Seq = [] while Q: u = Q.pop() #默認從最后一個刪除 Seq.append(u) for v in graph[u]: in_degrees[v] -= 1 #移除其所有指向 if in_degrees[v] == 0: Q.append(v) #再次篩選入度為0的頂點 if len(Seq) == vertex_num: #如果循環(huán)結束后存在非0入度的頂點說明圖中有環(huán),不存在拓撲排序 return Seq else: print("there's a circle.") G = { 'a':'bce', 'b':'d', 'c':'d', 'd':'', 'e':'cd' } print(toposort(G))
輸出結果:
['a', 'e', 'c', 'b', 'd']
到此這篇關于Python關于拓撲排序知識點講解的文章就介紹到這了,更多相關Python 拓撲排序內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python筆記之a(chǎn) = [0]*x格式的含義及說明
這篇文章主要介紹了Python筆記之a(chǎn) = [0]*x格式的含義及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-05-05Python表格數(shù)據(jù)處理庫之tablib庫詳解
這篇文章主要介紹了Python表格數(shù)據(jù)處理庫之tablib庫詳解,Tablib是一個用于處理電子表格數(shù)據(jù)的Python庫,它可以輕松地進行數(shù)據(jù)的導入和導出,以及數(shù)據(jù)格式的轉換,需要的朋友可以參考下2023-08-08python實現(xiàn)簡易版學生成績管理系統(tǒng)
這篇文章主要為大家詳細介紹了python實現(xiàn)簡易版學生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-06-06