Python3 notes

简介: Python3 notes

Python 拓扑排序


对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边(u,v)∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。

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

每个顶点出现且只出现一次;

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

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

拓扑排序结果:

[5, 4, 2, 3, 1, 0]

相关文章
|
数据采集 SQL 分布式计算
数据处理 、大数据、数据抽取 ETL 工具 DataX 、Kettle、Sqoop
数据处理 、大数据、数据抽取 ETL 工具 DataX 、Kettle、Sqoop
2544 0
|
2月前
|
数据采集 存储 监控
ETL 工程师必看!3个数据处理阶段及应用场景
本文详解ETL全流程:从需求对齐、数据探查,到提取转换加载,再到质量监控与优化,并结合制造、零售场景展示其应用价值,揭示如何构建高效、可靠的数据生命线。
|
2月前
|
数据采集 数据可视化 数据挖掘
ETL详解:从核心流程到典型应用场景
你是否常被数据混乱困扰?报表对不上、手工整合耗时、系统迁移困难——根源往往是数据分散、标准不一。解决这些问题的核心是ETL(抽取、转换、加载)。它通过自动化流程,将多源数据清洗、整合并加载至目标系统,提升数据质量与分析效率,支撑报表生成、数据仓库、BI分析等关键场景。掌握ETL,就是掌控数据价值的起点。
ETL详解:从核心流程到典型应用场景
|
5月前
|
SQL 分布式计算 Hadoop
别再云里雾里了!一文带你整明白Hadoop生态到底是啥玩意儿
别再云里雾里了!一文带你整明白Hadoop生态到底是啥玩意儿
247 0
|
4月前
|
人工智能 自然语言处理 算法
AI时代,ETL真的不行了吗?
本文探讨了AI技术如何深度参与数据处理与分析,推动企业数据集成从传统ETL向“ETL for AI”转型。通过分析AI与ETL的协作关系,指出未来数据集成将实现高效处理、安全流转与智能价值挖掘,助力企业迈向数智化转型。
AI时代,ETL真的不行了吗?
|
2月前
|
数据采集 存储 安全
一文带你讲透数据仓库分层!
在数据处理中,常遇到数据混乱、指标不一致、开发排期长等问题,根源往往在于数据分层设计不合理。本文详解数据仓库分层(ODS、DWD、DWS、DM、APP等),阐述其在数据清洗、整合、管理及应用中的关键作用,帮助提升数据质量、减少重复开发、增强系统扩展性,从而高效支撑业务决策。
一文带你讲透数据仓库分层!
|
2月前
|
存储 前端开发 关系型数据库
终于有人把数据仓库讲明白了
数据仓库不是大号数据库,更不是BI附属品。它通过整合多源数据、统一标准,让数据更易查、易用,真正服务于业务分析与决策。本文带你厘清数据仓库的本质、架构与搭建步骤,避开常见误区,实现数据价值最大化。
终于有人把数据仓库讲明白了
|
4月前
|
数据采集 NoSQL 关系型数据库
试了一圈 ETL 工具后,这几款真心够用了!
ETL(数据抽取、转换、加载)是整合企业分散数据的关键技术。本文介绍了四种常用ETL工具:FineDataLink(功能全面、可视化操作)、Kettle(开源免费、灵活易用)、DataX(高效同步、适合大数据搬运)、Airflow(流程调度、任务管理),并分析了各自适用场景,助力企业根据自身需求选择合适工具,提升数据处理效率。
|
XML 缓存 算法
SpringBoot2 | SpingBoot FilterRegistrationBean 注册组件 | FilterChain 责任链源码分析(九)
SpringBoot2 | SpingBoot FilterRegistrationBean 注册组件 | FilterChain 责任链源码分析(九)
331 0
|
数据采集 机器学习/深度学习 自然语言处理
nlp入门之基于贝叶斯算法的拼写错误检测器
基于贝叶斯思想简单的实现了一个拼写错误检测器