欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python關于拓撲排序知識點講解

 更新時間:2021年01月04日 15:39:45   作者:runoob  
在本篇文章里小編給大家分享了一篇關于Python關于拓撲排序知識點講解內(nèi)容,有興趣的朋友們可以學習下。

對一個有向無環(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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python2寫csv文件中文亂碼問題及解決方法

    Python2寫csv文件中文亂碼問題及解決方法

    python2最大的坑在于中文編碼問題,遇到中文報錯首先加u,再各種encode、decode,這篇文章給大家介紹Python2寫csv文件中文亂碼問題及解決方法,感興趣的朋友跟隨小編一起看看吧
    2022-11-11
  • Python筆記之a(chǎn) = [0]*x格式的含義及說明

    Python筆記之a(chǎn) = [0]*x格式的含義及說明

    這篇文章主要介紹了Python筆記之a(chǎn) = [0]*x格式的含義及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python中sys.argv參數(shù)用法實例分析

    python中sys.argv參數(shù)用法實例分析

    這篇文章主要介紹了python中sys.argv參數(shù)用法,實例分析了python中sys.argv參數(shù)的功能、定義及使用技巧,需要的朋友可以參考下
    2015-05-05
  • Python實現(xiàn)視頻下載功能

    Python實現(xiàn)視頻下載功能

    最近一兩年短視頻業(yè)務風生水起,各個視頻網(wǎng)站都有各自特色的短視頻內(nèi)容。如果有一個程序可以把各大視頻網(wǎng)站的熱門用戶最新發(fā)布的視頻下載下來,不僅方便了觀看,還可以將沒有版權的視頻發(fā)布在個人社交網(wǎng)站上,增加自己的人氣,多好呀
    2017-03-03
  • Python中一些深不見底的“坑”

    Python中一些深不見底的“坑”

    這篇文章主要給大家介紹了關于Python中一些深不見底的“坑”,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • python批量替換文件名中的共同字符實例

    python批量替換文件名中的共同字符實例

    這篇文章主要介紹了python批量替換文件名中的共同字符實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python表格數(shù)據(jù)處理庫之tablib庫詳解

    Python表格數(shù)據(jù)處理庫之tablib庫詳解

    這篇文章主要介紹了Python表格數(shù)據(jù)處理庫之tablib庫詳解,Tablib是一個用于處理電子表格數(shù)據(jù)的Python庫,它可以輕松地進行數(shù)據(jù)的導入和導出,以及數(shù)據(jù)格式的轉換,需要的朋友可以參考下
    2023-08-08
  • python實現(xiàn)簡易版學生成績管理系統(tǒng)

    python實現(xiàn)簡易版學生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了python實現(xiàn)簡易版學生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • elasticsearch python 查詢的兩種方法

    elasticsearch python 查詢的兩種方法

    這篇文章主要介紹了elasticsearch python 查詢的兩種方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Python開發(fā)中的Nonetype類型詳解

    Python開發(fā)中的Nonetype類型詳解

    這篇文章主要介紹了Python開發(fā)中的Nonetype類型詳解,None有自己的數(shù)據(jù)類型NoneType,你可以將None復制給任何變量,但是你不能創(chuàng)建其他NoneType對象,需要的朋友可以參考下
    2023-12-12

最新評論