拓扑排序

在计算机科学中,这种类型的应用出现在指令调度、在电子表格中重新计算公式值时对公式单元格求值的排序、逻辑合成、确定在makefiles中执行的编译任务的顺序、数据序列化以及解决链接器中的符号依赖性等方面。它还用于决定在数据库中以何种顺序加载带有外键的表。

卡恩(1962)首先描述了其中一种算法,它通过选择与最终拓扑排序相同顺序的顶点来工作。首先,找到一个没有引入边的“起始节点”列表,并将它们插入到集合S中;非空无环图中必须至少存在一个这样的节点。然后:

L←包含排序好的元素的空列表S←没有输入边的所有节点的集合whileSisnon-emptydoremoveanodenfromSaddntotailofLforeachnodemwithanedgeefromntomdoremoveedgeefromthegraphifmhasnootherincomingedgestheninsertmintoSifgraphhasedgesthenreturnerror(图表至少有一个环)elsereturnL(拓扑排序的顺序)如果该图是一个DAG,一个解决方案将包含在列表L中(该解决方案不一定是唯一的)。否则,图必须至少有一个环,因此拓扑排序是不可能的。

反映出结果排序的非唯一性,结构S可以是简单的集合、队列或堆栈。根据节点n从集合S中移除的顺序,会生产不同的解决方案。卡恩算法的一个变体在字典上打破了联系,这是科菲曼-格雷厄姆并行调度和分层图形绘制算法的一个关键组成部分。

拓扑排序的另一种算法是基于深度优先搜索。该算法以任意顺序遍历图中的每个节点,启动深度优先搜索,当该搜索到达自拓扑排序开始以来已经被访问过的任何节点或者该节点没有输出边(即叶节点)时终止:

偏序集只是一组对象以及“≤”不等式关系的定义,满足自反性(x≤x)、反对称(如果x≤y和y≤x则x=y)和传递性(如果x≤y和y≤z则x≤z)的公理。一个全序关系是偏序的,如果,对于集合中的每两个对象x和y,x≤y或y≤x。全序关系在计算机科学中一个被人熟知的存在就是需要执行比较排序算法的比较运算符。对于有限集合,全序关系可以用对象的线性序列来标识,其中每当第一个对象在顺序上位于第二个对象之前时,“≤”关系为真;比较排序算法可以用于以这种方式将全序关系转换成序列。偏序的线性扩展和全序相容,也就是说,如果偏序关系中x≤y,那么全序关系中x≤y。

只要存在从x到y的有向路径,也就是说,每当y从x可达时,就可以通过让对象集成为DAG的顶点,并为任意两个顶点x和y定义x≤y为真,来定义任意DAG的偏序;根据这些定义,DAG的拓扑序与这个偏序的线性扩展是一样的。相反,有限集合上的任何偏序都可以定义为DAG中的可达性关系。一种方法是定义一个DAG,该DAG对于部分有序集中的每个对象都有一个顶点,对于x≤y的每对对象都有一个边xy。一般来说,这会产生边较少的Dag,但是这些Dag中的可达性关系仍然是相同的偏序。通过使用这些构造,可以使用拓扑排序算法来寻找偏序的线性扩展。

THE END
1.数据结构图拓扑排序哔哩哔哩数据结构 图 拓扑排序小马xiao_ma 立即播放 打开App,流畅又高清100+个相关视频 更多7122 3 42:51 App 数据结构复习——图 2.4万 43 6:37 App 哈弗曼编码讲解 2.9万 43 7:34 App 深度优先和广度优先搜索 7万 30 4:43 App 数据结构大题—哈希查找,拉链法和线性探测法构造哈希表并求平均查找长度,https://m.bilibili.com/video/BV1aK41197t6
2.浅谈什么是图拓扑排序那么如何合理的分配资源才能保证工程能够按时完成呢?将任务作为图的顶点,将任务之间的依赖关系作为图的边,这样就可以将实际问题抽象为数据结构图论中的典型问题——图的拓扑排序。 2 重要概念 有向无环图(Directed Acyclic Graph, DAG)是有向图的一种,字面意思的理解就是图中没有环。常常被用来表示https://blog.csdn.net/kexuanxiu1163/article/details/89838375
3.对如下所示的有向图进行拓扑排序,得到的拓扑序列可能是()314265或314625两种情况 https://www.nowcoder.com/questionTerminal/35a856102dcc4c3fbe35ab4581af2b93
4.拓扑排序(有向图和无向图),判断是否有环,有算法思路,代码拓扑排序(有向图): 从AOV网中选择一个入度为0的顶点输出,然后删去该顶点,并删除以此顶点为弧尾的弧,重复这个步骤,知道输出图中全部的顶点,或者找不到入度为0的顶点 如果这个图的全部顶点被输出,说明不存在回路的AOV网,否则,存在回路 拓扑排序可以不唯一 https://www.jianshu.com/p/9bf83a799550
5.对图所示的有向图进行拓扑排序,可以得到不同的拓扑序列的个数是百度试题 题目对图所示的有向图进行拓扑排序,可以得到不同的拓扑序列的个数是( )。 A.4B.3C.2D.1相关知识点: 试题来源: 解析 B 反馈 收藏 https://easylearn.baidu.com/edu-page/tiangong/bgkdetail?id=514f9bf7941ea76e58fa04c0&fr=search
6.C++详细讲解图的拓扑排序C语言拓扑排序只适用于 AOV网 (有向无环图)若图中有环,则一定不存在拓扑序。可以证明,一个有向无环图,一定存在一个拓扑序列。有向无环图,又被称为拓扑图。入度: 即有多少条边指向自己这个节点。出度: 即有多少条边从自己这个节点指出去。二、算法流程算法流程:https://www.jb51.net/article/249850.htm
7.对有向图进行拓扑排序的方法是:(1)初始时拓扑序列为空;(2)任意(3)重复(2),直到不存在入度为0的顶点为止(若所有顶点都进入拓扑序列则完成拓扑排序,否则由于有向图中存在回路无法完成拓扑排序)。 函数int* TopSort(LinkedDigraph G)的功能是对有向图G中的顶点进行拓扑排序,返回拓扑序列中的顶点编号序列,若不能完成拓扑排序,则返回空指针。其中,图G中的顶点从1开始依次编号,顶https://www.cnitpm.com/st/3809416600.html
8.拓扑排序问题一个有向图具有有序的拓扑排序序列,那它的邻接矩阵拓扑排序问题一个有向图具有有序的拓扑排序序列,那它的邻接矩阵必定为什么?比如A→B→C这个序列我画出来是0 1 00 0 10 0 0不是三角矩阵啊 扫码下载作业帮搜索答疑一搜即得 答案解析 查看更多优质解析 解答一 举报 左下三角都是0,即上三角矩阵. 解析看不懂?免费查看同类题视频解析查看解答https://qb.zuoyebang.com/xfe-question/question/0065f0efa300bace99a5ae3a8ee0a9bc.html
9.2006年下半年全国自考(数据结构)真题试卷自考int n,e; //图的当前顶点数和弧数 }ALGraph //邻接表类型 下列算法f33的功能是,对以邻接表表示的有向图进行拓扑排序。 (1)阅读算法f33,并在空缺处填入合适的内容,使其成为一个完整的算法; (2)对于如图所示的邻接表,将执行算法f33后的topo[]结果填入给定的数组中。 https://www.educity.cn/zikao/74140.html
10.算法如何确定图(Graph)里有没有环(Cycle)?“判断一个无向图有没有环”的方法本文中就有三个。这里,我们先取第一种方法:拓扑排序判断无向图是否有环。这种方法的描述如下: 使用拓扑排序可以判断一个无向图中是否存在环,具体步骤如下: 1. 求出图中所有节点的度。 2. 将所有度 <= 1 的节点入队。 3. 当队列不空时进入循环,弹出队首元素,把与队https://cloud.tencent.com/developer/article/1825193
11.C++图系列之有向无环图的拓扑排序算法可以使用拓扑排序算法验证AOV网结构的合理性。 拓扑排序算法的思想: 这里的排序并不是指递增或递减式的排序,而是通过算法把有向无环图中的顶点以线性序列方式输出。如果AOV网中的所有顶点都出现在它的线性序列中,则说明此AOV网不存在环,或说拓扑排序算法可以检查图是否有环。 https://zhuanlan.zhihu.com/p/674192824
12.图论(四)图的拓扑排序51CTO博客那么对于AOV网络的拓扑排序怎么做呢? (1)选择入度为零的顶点(从顶点引出的边箭头全部都是向外的)并输出。 (2)删除该顶点及该顶点发出的所有边。 (3)重复步骤(1)和(2),直到找不到入度为0的顶点。 按照上面这样的方法,就叫做拓扑排序,其结果有两种情形: https://blog.51cto.com/sbp810050504/901022
13.4.4图的基本应用及其复杂度分析每日一练● 设有向图有n个顶点和e条边,进行拓扑排序时,总的计算时间为(4)。 (4)A.O(n ) B.O(en) C.O(e ) D.O(n+e) ● 以下哪个是有向图图4-10的拓扑排序序列(5)。 (5)A.ABCDE B.ACDEB C.ABDCE D.ACBED ●图4-10所示的有向图所有拓扑排序序列有(6)个。 https://www.kaoyan.com/kaoyan/05/329379/
14.数据结构考试复习题库=NULLB.p==NULLC.P->next==headD.P==head【答案】C从一个具有n个结点的单链表中查找其值等于 x结点时,在查找成功的情况下,需平均比拟 ()个结点.A.nB.n/2 C.(n-1)/2 D.(n+1)/2【答案】D在有向图的顶点的拓扑序列中,如果 Vi在Vj之前,那么以下情况一定不会出现的是 ().A.图中有弧<V,https://www.renrendoc.com/paper/232819760.html