您好、欢迎来到现金彩票网!
当前位置:欢乐棋牌 > 边集合 >

数据结构---拓扑排序详解

发布时间:2019-07-14 09:19 来源:未知 编辑:admin

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

  拓扑排序对应施工的流程图具有特别重要的作用,它可以决定哪些子工程必须要先执行,哪些子工程要在某些工程执行后才可以执行。为了形象地反映出整个工程中各个子工程(活动)之间的先后关系,可用一个有向图来表示,图中的顶点代表活动(子工程),图中的有向边代表活动的先后关系,即有向边的起点的活动是终点活动的前序活动,只有当起点活动完成之后,其终点活动才能进行。通常,我们把这种顶点表示活动、边表示活动间先后关系的有向图称做顶点活动网(Activity On Vertex network),简称AOV网。

  一个AOV网应该是一个有向无环图,即不应该带有回路,因为若带有回路,则回路上的所有活动都无法进行(对于数据流来说就是死循环)。在AOV网中,若不存在回路,则所有活动可排列成一个线性序列,使得每个活动的所有前驱活动都排在该活动的前面,我们把此序列叫做拓扑序列(Topological order),由AOV网构造拓扑序列的过程叫做拓扑排序(Topological sort)。AOV网的拓扑序列不是唯一的,满足上述定义的任一线性序列都称作它的拓扑序列。

  如果我们有如下的一个有向无环图,我们需要对这个图的顶点进行拓扑排序,过程如下:

  首先,我们发现V6和v1是没有前驱的,所以我们就随机选去一个输出,我们先输出V6,删除和V6有关的边,得到如下图结果:

  然后,我们继续寻找没有前驱的顶点,发现V1没有前驱,所以输出V1,删除和V1有关的边,得到下图的结果:

  然后,我们又发现V4和V3都是没有前驱的,那么我们就随机选取一个顶点输出(具体看你实现的算法和图存储结构),我们输出V4,得到如下图结果:

  然后,我们分别输出V5和V2,最后全部顶点输出完成,该图的一个拓扑序列为:

  Kahn的算法的思路其实就是我们之前那个手动展示的拓扑排序的实现,我们先使用一个栈保存入度为0 的顶点,然后输出栈顶元素并且将和栈顶元素有关的边删除,减少和栈顶元素有关的顶点的入度数量并且把入度减少到0的顶点也入栈。具体的代码如下:

  其实DFS就是深度优先搜索,它每次都沿着一条路径一直往下搜索,知道某个顶点没有了出度时,就停止递归,往回走,所以我们就用DFS的这个思路,我们可以得到一个有向无环图的拓扑序列,其实DFS很像Kahn算法的逆过程。具体的代码实现如下:

  对于基于DFS的算法,增加结果集的条件是:顶点的出度为0。这个条件和Kahn算法中入度为0的顶点集合似乎有着异曲同工之妙,Kahn算法不须要检测图是否为DAG,假设图为DAG,那么在入度为0的栈为空之后,图中还存在没有被移除的边,这就说明了图中存在环路。而基于DFS的算法须要首先确定图为DAG,当然也可以做出适当调整,让环路的检测測和拓扑排序同一时候进行,毕竟环路检測也可以在DFS的基础上进行。

  本文将从以下几个方面介绍拓扑排序:拓扑排序的定义和前置条件和离散数学中偏序/全序概念的联系典型实现算法Kahn算法基于DFS的算法解的唯一性问题实际例子取材自以下材料:博文来自:不忘初心,好好沉淀

  有向无环图通常来表示活动之间的先后关系,AOV图中顶点表示活动,有向的边表示活动间的先后关系,例如边表示活动u是获得v发生的前提,很明显,这种图不应该存在环()即不应该某活动以自身为先决条件。如图是一...博文来自:yanerhao的专栏

  拓扑排序,顾名思义,就是一种排序方法。这是一种什么排序?这种排序的作用?然后怎么去实现这种排序算法?现在就让我们仔细研究下。1、什么是拓扑排序,也就是拓扑排序的概念实际上,拓扑排序是一种图论算法,该算...博文来自:a20180825的博客

  版权声明:本文为博主原创文章,转载请标明出处~我们用两种方法来做这道题。BFS宽度...博文来自:星星的博客

  一、定义:是将一个有向无环图G的所有的顶点排成一个线性序列,使得有向图中的任意的顶点u和v构成的弧属于该图的边集,并且使得u始终是出现在v的前面。通常这样的序列称为是拓扑序列。注意:只有有向无环图才可...博文来自:shao1996的博客

  拓扑排序思路1:拓扑排序。构建的邻接表就是我们通常认识的邻接表,每一个结点存放的是后...博文来自:caoshulin1989的专栏

  下面是原题目 假设给我们一个任意的图,它可能是也可能不是DAG(有向无圈图),推广拓扑排序算法,以使得给定有向图G的输入,它的输出是以下两者之一: (a) 一个拓扑排序,于是确定了G为DAG; 或者论坛

  拓扑排序入门下面先给一道题,然后先思考一下,下面再开始介绍拓扑排序,有N个比赛队(1lt;=Nlt;=500),编号依次为1,2,3...博文来自:的博客

  什么是拓扑排序呢?首先我们来了解一下另一个词:什么是“拓扑序”?拓扑序:在图中从顶点A到顶点B有一条有向路径,则顶点A一定排在顶点B之前。满足这样的条件的顶点序列称为一个拓扑序。而获得一个拓扑序列的过...博文来自:justinzeng的博客

  这一节我们学习一个新的排序算法,准确的来说,应该叫“有向图的拓扑排序”。所谓有向图,就是A-gt;B,但是B不能到A。与无向图的区别是,它的边在邻接矩阵里只有一项(友情提示:如果对图...博文来自:倪升武的博客

  1、前言前面两篇博客,我已经把线性表的两种基本的表示形式,做了一个基本的介绍和一些对比。但是,我突然发现在链表这里我缺少一个很重要的内容,那就是对我们的链表进行排序,其实,在连接两个链表的时候,就要求...博文来自:William

  拓扑排序算法主要过程:1.创建一个数组记录每个节点的前驱节点数目。2.运用递归,每一次递归中,找出没有前驱节点的节点,输出该节点,并做相关标记(或删去);然后找到该节点引出的连接,做相关标记(或删去)...博文来自:hhthht8888的博客

  定义:把AOV网(用定点表示活动,用弧表示活动间优先关系的有向图)络中各个顶点按照它们互相之间的优先关系排列成一个线性序列的过程叫做拓扑排序。方法:在有向图中选一个没有前驱的顶点并且输出 从图中删除该...博文来自:有酒醉三生丶

  在一个有向图中,对所有的节点进行排序,要求没有一个节点指向它前面的节点。先统计所有节点的入度,对于入度为0的节点就可以分离出来,然后把这个节点指向的节点的入度减一。一直做改操作,直到所有的节点都被分离...

  图在数学中,一个图(Graph)是表示物件与物件之间的关系的数学对象,是图论的基本研究对象。图是十分重要的数据结构,常常被应用于实际生活的应用之中。生活中常见的问题例如交通路线图、任务指定分配、工期计...

  1定义和前置条件1.1定义将有向图中的顶点以线性方式进行排序。即对于任何连接自顶点u到顶点v的有向边uv,在最后的排序结果中,顶点u总是在顶点v的前面。假设我非常想学习一门机器学习的课程,但是在修这么...

  由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。顶点表活动,弧表示活动间先后依赖关系的有向图。用以表示工程或系统的施工计划,可据此判断工程是否可以顺利进行。网中应存在一覆盖全部顶...

  一、什么是拓扑排序在图论中,拓扑排序(TopologicalSorting)是一个有向无环图(DAG,DirectedAcyclicGraph)的所有顶点的线性序列。且该序列必须满足下面两个条件:每个...

  对于任何有向图而言,其拓扑排序为其所有结点的一个线性排序(对于同一个有向图而言可能存在多个这样的结点排序)。该排序满足这样的条件——对于图中的任意两个结点u和v,若存在一条有向边从u指向v,则在拓扑排...

  拓扑排序是一个比较常用的图论算法,经常用于完成有依赖关系的任务的排序。举个栗例子:有人想要制作一件工具,但是这个工具不是一次就可以完成的,分很多个步骤,而且这些步骤是有顺序的,也就是说,假设B的顺序在...

  zizi0092011的博客编译原理-简单计算器(词法分析/语法分析)-含源码

  编译原理-简单计算器(词法分析/语法分析)-含源码:之前大学的时候,编译原理课程有一个做计算器的任务,当时没有做,只顾做一个漂亮计算器界面。想来当时是买椟还珠了,有点小遗憾,觉得编译原理没有实践,没有...

  如果将某一集合中的所有元素作为图的结点,将该集合上的偏序关系作为图的边,则任意一个偏序关系即可以表示一个有向图。      拓扑排序是有向图的一个重要操作。在给定的有向图G中,若顶点序列v1,v2,....

  题目描述今天Ckp打算去约会。大家都知道Ckp是超级大帅哥,所以和他约会的MM也超级多,她们每个人都和Ckp订了一个约会时间。但是今天Ckp刚打算出门的时候才发现,某几个MM的约会时间有冲突。由于...

  什么是拓扑排序?拓扑排序顾名思义是一种排序算法,它用于给有向图排序。有向图是由一组顶点和一组有方向的边组成的图,每条有方向的边都连接着有序的一对顶点,因此A-gt;B代表A可以到达B,并不代...

  如果图中存在环(回路),那么该图不存在拓扑排序,在这里我们讨论的都是无环的有向图。什么是拓扑排序一个例子对于一部电影的制作过程,我们可以看成是一个项目工程。所有的工程都可以分为若干个活动&...

  拓扑排序可以帮助我们找到时间发生的顺序,即是先穿外套还是先穿内衣。拓扑排序的原理思想很简单,即先建立一个邻接表,临界表中记录有各个顶点的入度,我们只要一次找到入度变为0的即可。方法如下:......

  0)拓扑排序拓扑排序是对有向无圈图的顶点的一种排序,这个排序的结果是如果存在一条vi到vj的路径,那么排序中vi在vj的前面。下图是一个有向无圈图的例子:在这个有向无圈图中,1,6,5,7,4,2,3...

  背景用【有向图】表示一个【工程的施工图】或【程序的数据流图】,则图中不允许出现回路例子:【回路】打地基-amp;amp;amp;amp;amp;gt;做房子结构-amp;amp;a...

  packageendual.tuopupaixu;/***拓扑排序**拓扑排序的思想虽然不寻常,但是还是很简单的*有两个步骤要去考虑*步骤1*找到一个没有后续的顶点(这是从有向图的角度是做了,而不能用...

  解法一:深度遍历假设图以邻接矩阵表示,一条深度遍历路线中如果有结点被第二次访问到,...

  拓扑排序的概念:重复一个操作:(遍历入度为0的点,遍历从这个点连接的其他点)拓扑排序的注意事项:因为是遍历时是从一个点到其他点,也就是说,需要是有向边,再稍加推理即可得出这样一个结论:拓扑排序必须在D...

  拓扑排序(其实是一种依赖关系):对于有向且无环的图来说,当前这个节点的依赖来其之前已经完成了。下面附上一个图让大伙更好的理解:比如这个图:B需要依赖A才能完成,A需要依赖C和D才能完成,而D需要依赖F...

  一、什么是拓扑排序 下图就是拓扑排序 拓扑排序其实是一个线性排序。——若图中存在一条有向边从u指向v,则在拓扑排序中u一定出现在v前面。维基百科拓扑排序的定义:a topologicalsort or...

  拓扑排序算法适用范围:要求有向图,且有入度为0的节点,且没有环   1.将图中的所有节点全部记录到HashMap,入度为零的节点添加到zeroInQueue   2.建立一个集合用来存放结果  ...

  这里写链接内容1、前言线性表是最常用且是最简单的一种数据结构。形如:A1、A2、A3….An这样含有有限的数据序列,我们就称之为线、线性表的两种表示形式顺序表示(其实就是数组)链表表示(本博客...

  业精于勤-行成于思jquery/js实现一个网页同时调用多个倒计时(最新的)

  jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn...

  command窗口是命令窗口,即为sqplus窗口,有命令提示符,识别sqlplus命令,基本的命令都可以执行nsql仅可执行DDL、select、DML等...

  说明n网上关于caffe的安装教程非常多,但是关于每一步是否操作成功,出现了什么样的错误又该如何处理没有给出说明。因为大家的操作系统的环境千差万别,按照博客中的教程一步步的安装,最后可能失败——这是很...

  之前在工作中利用postman做了接口测试,发现这个东东其实还挺好用的,我个人喜欢总结于是乎有了下面的东西。方便以后查阅或修改。n1.首先postman的安装参及简单介绍考以下的链接:n       ...

  话说上次配置PCL开发环境失败;rn估计可能是环境变量没配置好;下面从新搞一...

  扫二维码关注,获取更多技术分享nnn 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...

  最近比较有空,大四出来实习几个月了,作为实习狗的我,被叫去研究Docker了,汗汗!nnDocker的三大核心概念:镜像、容器、仓库n镜像:类似虚拟机的镜像、用俗话说就是安装文件。n容器:类似一个轻量...

  webService学习(二)—— 调用自定义对象参数rn本文主要内容:rn1、如何通过idea进行webService Client的简单实现(不再使用wsimport的方式,其实是ide帮我们做了...

  自己整理编写的逻辑回归模板,作为学习笔记记录分享。数据集用的是14个自变量Xi,一个因变量Y的australian数据集。nnn1. 测试集和训练集3、7分组naustralian ...

http://vuagiamgia.com/bianjihe/302.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有