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使用random和tertools模块解一些经典概率问题
Jan 28 Python
Python+MongoDB自增键值的简单实现
Nov 04 Python
python 实现将字典dict、列表list中的中文正常显示方法
Jul 06 Python
Python爬虫将爬取的图片写入world文档的方法
Nov 07 Python
Python中collections模块的基本使用教程
Dec 07 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
Python实现滑动平均(Moving Average)的例子
Aug 24 Python
jupyter notebook 的工作空间设置操作
Apr 20 Python
Django的ListView超详细用法(含分页paginate)
May 21 Python
python实现在线翻译
Jun 18 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
Python循环之while无限迭代
Apr 30 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
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/29 PHP
php递归创建目录的方法
2015/02/02 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
图文详解phpstorm配置Xdebug进行调试PHP教程
2016/06/13 PHP
Yii2中Restful API原理实例分析
2016/07/25 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
索趣科技的答案
2007/02/07 Javascript
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
jquery三个关闭弹出层的小示例
2013/11/05 Javascript
jQuery常用操作方法及常用函数总结
2014/06/19 Javascript
JavaScript forEach()遍历函数使用及介绍
2015/07/08 Javascript
AngularJS学习笔记之依赖注入详解
2016/05/16 Javascript
浅析Javascript中bind()方法的使用与实现
2016/05/30 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
Python中的localtime()方法使用详解
2015/05/22 Python
python实现mysql的单引号字符串过滤方法
2015/11/14 Python
Python读取properties配置文件操作示例
2018/03/29 Python
Django框架 查询Extra功能实现解析
2019/09/04 Python
python自动化测试无法启动谷歌浏览器问题
2019/10/10 Python
pygame实现打字游戏
2021/02/19 Python
详解python中各种文件打开模式
2020/01/19 Python
Python+Dlib+Opencv实现人脸采集并表情判别功能的代码
2020/07/01 Python
openCV提取图像中的矩形区域
2020/07/21 Python
CSS3转换功能transform主要属性值分析及实现分享
2012/05/06 HTML / CSS
阿根廷在线宠物商店:Puppis
2018/03/23 全球购物
一些网络技术方面的面试题
2014/05/01 面试题
Python里面如何拷贝一个对象
2014/02/17 面试题
就业自荐书
2013/12/05 职场文书
会计毕业生自荐书
2014/06/12 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
计划生育工作总结2015
2015/04/03 职场文书
初中英语教学反思范文
2016/02/15 职场文书
python计算列表元素与乘积详情
2022/08/05 Python