iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >拓扑排序Python实现的过程
  • 903
分享到

拓扑排序Python实现的过程

拓扑排序Python拓扑排序Python拓扑排序 2023-01-31 12:01:03 903人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录有向无环图拓扑排序算法步骤代码实现总结有向无环图 拓扑排序是针对有向无环图(DAG, Directed Acyclic Graph)的 具有以下性质: 如果这个图不是 DAG,那

有向无环图

拓扑排序是针对有向无环图(DAG, Directed Acyclic Graph)的

具有以下性质:

  • 如果这个图不是 DAG,那么它是没有拓扑序的;
  • 如果是 DAG,那么它至少有一个拓扑序;
  • 反之,如果它存在一个拓扑序,那么这个图必定是 DGA。

拓扑排序

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

通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。

简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。

算法步骤

在讲算法步骤之前先了解入度与出度的概念:

  • 入度:顶点的入度是指「指向该顶点的边」的数量;
  • 出度:顶点的出度是指该顶点指向其他点的边的数量。

可以理解为入度为0的点就是起点,拓扑排序步骤如下:

  • 从 DAG 图中选择一个入度为0的顶点并输出;
  • 从图中删除该顶点和所有以它为起点的有向边;
  • 重复 1 和 2 直到当前的 DAG 图为空或当前图中不存在入度为0的顶点为止。后一种情况说明有向图中必然存在环

代码实现

对于下图:

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]

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 拓扑排序Python实现的过程

本文链接: https://www.lsjlt.com/news/191773.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 拓扑排序Python实现的过程
    目录有向无环图拓扑排序算法步骤代码实现总结有向无环图 拓扑排序是针对有向无环图(DAG, Directed Acyclic Graph)的 具有以下性质: 如果这个图不是 DAG,那...
    99+
    2023-01-31
    拓扑排序Python 拓扑排序 Python拓扑排序
  • Java如何实现拓扑排序
    今天小编给大家分享一下Java如何实现拓扑排序的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。铺垫有向图:我们这节要讲的算法涉...
    99+
    2023-06-30
  • 详解Java实现拓扑排序算法
    目录一、介绍二、拓扑排序算法分析三、拓扑排序代码实现一、介绍 百科上这么定义的: 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中...
    99+
    2024-04-02
  • Java实现拓扑排序的示例代码
    目录铺垫简介工作过程数据结构拓扑排序测试样例1测试样例2总结铺垫 有向图:我们这节要讲的算法涉及到有向图,所以我先把有向图的一些概念说一下,文章后面就不做解释啦。首先有向图节点与节点...
    99+
    2024-04-02
  • 详解C++实现拓扑排序算法
    目录一、拓扑排序的介绍二、拓扑排序的实现步骤三、拓扑排序示例手动实现四、拓扑排序的代码实现五、完整的代码和输出展示一、拓扑排序的介绍 拓扑排序对应施工的流程图具有特别重要的作用,它可...
    99+
    2024-04-02
  • 拓扑排序是怎么排序的
    这篇文章主要讲解了“拓扑排序是怎么排序的”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“拓扑排序是怎么排序的”吧!方法:1、找到图中的一个入度为0的结点,将此节点从图中剔除并加入到序列E中;2...
    99+
    2023-06-20
  • python 多重继承之拓扑排序
    python 多重继承之拓扑排序一、什么是拓扑排序 在图论中,拓扑排序(Topological Sorting) 是一个 有向无环图(DAG,Directed Acyclic Graph) 的所有顶点的线性序列。且该序列必须满足下面两个条件...
    99+
    2023-01-31
    拓扑 python
  • C++图的拓扑排序是什么
    本文小编为大家详细介绍“C++图的拓扑排序是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++图的拓扑排序是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、前言且该序列必须满足下面两个条件:每个顶点...
    99+
    2023-06-30
  • Java实现拓扑排序算法的示例代码
    目录拓扑排序原理1.点睛2.拓扑排序3.算法步骤4.图解拓扑排序算法实现1.拓扑图2.实现代码3.测试拓扑排序原理 1.点睛 一个无环的有向图被称为有向无环图。有向无环图是描述一个工...
    99+
    2024-04-02
  • C++详细讲解图的拓扑排序
    目录一、前言二、算法流程三、有向图的拓扑排序一、前言 且该序列必须满足下面两个条件: 每个顶点出现且只出现一次。若存在一条从顶点 x到顶点 y的路径,那么在序列中顶点 x 出现在顶点...
    99+
    2024-04-02
  • C/C++浅析邻接表拓扑排序算法的实现
    目录前言一、拓扑排序算法的思路二、实现步骤1.求个顶点的入度2.拓扑排序的实现三、测试结果总结前言 在软件开发、施工过程、教学安排等等的一系列活动中,往往需要一个有向无环图来表示其是...
    99+
    2024-04-02
  • Java数据结构之有向图的拓扑排序详解
    目录前言拓扑排序介绍检测有向图中的环实现思路API设计代码实现基于深度优先的顶点排序实现思路API设计代码实现拓扑排序API设计代码实现测试验证前言 在现实生活中,我们经常会同一时间...
    99+
    2022-11-13
    Java有向图 拓扑排序 Java 有向图 Java 拓扑排序
  • Java实现扑克牌程序
    本文实例为大家分享了Java实现扑克牌程序的具体代码,供大家参考,具体内容如下 思路: 在实现之前,先要想好步骤,思路清晰才不会出错。 要实现一副扑克牌,首先要创建这个类,然后有一副...
    99+
    2024-04-02
  • 计数排序与桶排序python实现
    计数排序 计数排序原理: 找到给定序列的最小值与最大值 创建一个长度为最大值-最小值+1的数组,初始化都为0 然后遍历原序列,并为数组中索引为当前值-最小值的值+1 此时数组中已经记录好每个值的数量,自然也就是有序的了 ...
    99+
    2023-01-31
    python
  • SQL如何实现过滤排序
    这篇文章将为大家详细讲解有关SQL如何实现过滤排序,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 1、where  &n...
    99+
    2024-04-02
  • Vue 列表过滤与排序的实现
    目录一、数据过滤watch实现computed 实现二、列表排序三、数据更新的一个问题四、Vue.set 方法五、Vue监视数据的原理六、综合练习一、数据过滤 watch实现 <...
    99+
    2024-04-02
  • python中快速排序的过程有哪些
    今天就跟大家聊聊有关python中快速排序的过程有哪些,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1、运作过程(1)从数列中挑出一个元素,称为基准,重新排序数列,所有元素比基准值小...
    99+
    2023-06-15
  • 快速排序python实现
      快速排序 快速排序的实现同样使用分治法,它的原理是从序列中选择一个值作为基准值,然后分成比基准值小的序列集合和比基准值小的序列集合和与基准值相等的序列集合。 再将比基准值小的序列集合和比基准值小的序列集合再次进行选择基准值分割,最...
    99+
    2023-01-31
    快速 python
  • Python实现冒泡排序
    #!/usr/bin/python # -*- coding:UTF-8 -*- def maopao(numbers):     for j in xrange(len(numbers)-1,-1,-1):...
    99+
    2023-01-31
    Python
  • python 快速排序实现
    import random num_list = []for x in range(30):    num_list.append(random.randint(1, 500))list_len = ...
    99+
    2023-06-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作