Python关于拓扑排序知识点讲解


Posted in Python onJanuary 04, 2021

对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。

通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。

在图论中,由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序(英语:Topological sorting):

  • 每个顶点出现且只出现一次;
  • 若A在序列中排在B的前面,则在图中不存在从B到A的路径。

Python关于拓扑排序知识点讲解

实例代码

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()

执行以上代码输出结果为:

拓扑排序结果:

[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:  #如果循环结束后存在非0入度的顶点说明图中有环,不存在拓扑排序
  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 拓扑排序内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在Python编程过程中用单元测试法调试代码的介绍
Apr 02 Python
详解Python中的日志模块logging
Jun 19 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
Mar 13 Python
Python并发之多进程的方法实例代码
Aug 15 Python
利用python提取wav文件的mfcc方法
Jan 09 Python
python实现电子词典
Mar 03 Python
django中的数据库迁移的实现
Mar 16 Python
pandas分组聚合详解
Apr 10 Python
解决django 向mysql中写入中文字符出错的问题
May 18 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
python tkinter的消息框模块(messagebox,simpledialog)
Nov 07 Python
Python下载的11种姿势(小结)
Nov 18 Python
Python经典五人分鱼实例讲解
Jan 04 #Python
Python约瑟夫生者死者小游戏实例讲解
Jan 04 #Python
python邮件中附加文字、html、图片、附件实现方法
Jan 04 #Python
python自动化发送邮件实例讲解
Jan 04 #Python
Python Selenium库的基本使用教程
Jan 04 #Python
selenium学习教程之定位以及切换frame(iframe)
Jan 04 #Python
python自动打开浏览器下载zip并提取内容写入excel
Jan 04 #Python
You might like
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
浅析php与数据库代码开发规范
2013/08/08 PHP
ASP和PHP实现生成网站快捷方式并下载到桌面的方法
2014/05/08 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
php中in_array函数用法分析
2014/11/15 PHP
php 实现进制相互转换
2016/04/07 PHP
JavaScript进阶教程(第四课第一部分)
2007/04/05 Javascript
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
jQuery设置与获取HTML,文本和值的简单实例
2014/02/26 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
2015/10/02 Javascript
JS中BOM相关知识点总结(必看篇)
2016/11/22 Javascript
jquery ui sortable拖拽后保存位置
2017/04/27 jQuery
详解Vue 开发模式下跨域问题
2017/06/06 Javascript
webpack使用 babel-loader 转换 ES6代码示例
2017/08/21 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
2018/05/14 Javascript
微信小程序使用wxParse解析html的实现示例
2018/08/30 Javascript
JavaScript静态作用域和动态作用域实例详解
2019/06/17 Javascript
Webpack 4如何动态切割JS注入文件名详解
2019/07/09 Javascript
Python中random模块生成随机数详解
2016/03/10 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
Python玩转加密的技巧【推荐】
2019/05/13 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
Django框架反向解析操作详解
2019/11/28 Python
详解在Python中使用Torchmoji将文本转换为表情符号
2020/07/27 Python
使用tensorflow进行音乐类型的分类
2020/08/14 Python
如何通过安装HomeBrew来安装Python3
2020/12/23 Python
葡萄牙鞋子品牌:Fair
2016/12/10 全球购物
文员个人求职自荐信
2013/09/21 职场文书
毕业生的自我评价分享
2013/12/18 职场文书
新驾驶员个人自我评价
2014/01/03 职场文书
出纳员岗位责任制
2014/02/11 职场文书
羽毛球比赛策划方案
2014/06/13 职场文书
公司领导班子召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书