`
Simone_chou
  • 浏览: 184794 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

拓扑排序

 
阅读更多

拓扑排序

 1.概述:

    拓扑排序就是将一个“有向无环图G“(左图所示,右图为有环的有向图)中的所有顶点排成一个线性序列,而这个线性序列就叫做是拓扑序列。

    更专业的说法就是:由某个集合上的一个偏序得到该集合上的一个全序的操作。

    而偏序和全序就是离散数学中的概念:

    1.偏序:设A是一个非空集,P是A上的一个关系,若关系P是自反的、反对称的、和传递的,则称P是集合A上的偏序关系。

    2.全序:在集合 A 中,存在偏序关系 R,如果对于任意 aAbA, 有 aRb 或 bRa,即 A 中的每对元素都满足关系 R,则集合 A 上的偏序 R 是全序的或线性次序的。

 

    

 

2.注意点:

    1.如果图中存在着有向环,则不可能进行拓扑排序的:

       比如右图,v3,v6,v7三者之间的入度都等于1,没有一个的入度是0的,所以无法删除节点;

    2.一个有向无环图存在的拓扑排序可能有多种,不唯一:

       因为对于有向图中没有限定次序关系的顶点,是可以人为的加上任意次序的;

       比如左图,拓扑序列可能是v1→v2v3v4v5v6v7v8,也有可能是v1→v3→v2→v6→v7→v4→v5→v8;

 

 

3.实现:

    1.首先要找到任意入度为0的一个顶点,删除它及所有相邻的边,再找入度为0的顶点,以此类推,直到删除所有顶点。顶点的删除顺序即为拓扑排序。(入度为0来判断)

       总言而之,就是逐次去掉没有前驱的结点的过程。

    2.对有向无环图利用深度优先搜索(DFS)进行拓扑排序。(出度为0来判断,用栈)

       在访问完一个结点之后把它加到当前拓扑排序的首部,这里为什么是首部?

       是因为每次最先退出DFS的顶点应该是最后一个,就是出度为0的顶点,那就是拓扑排序的最后一个顶点,所以如果不放在首部的话,那么退出DFS先后记录下来的顶点序列就是逆向的拓扑排序序列了。

 

 

    

  • 大小: 27.6 KB
分享到:
评论
3 楼 yomean 2013-08-09  
为什么觉得你说的偏序和全序的定义怪怪的。。
2 楼 Simone_chou 2013-08-08  
沙茶敏 写道
拓扑排序有个找关键路径  可以顺路学下~

我才刚发表的……
1 楼 沙茶敏 2013-08-08  
拓扑排序有个找关键路径  可以顺路学下~

相关推荐

    数据结构拓扑排序课程设计.docx

    课题二 拓扑排序 2.1 问题的提出2.1 问题的提出 任务:编写函数实现图的拓扑排序。 程序所实现的功能: 建立对应的邻接表,对该图进行拓扑排序,并显示排序结果。 输入: 顶点数, 边数及各顶点信息(数据格式为整形...

    操作系统 拓扑排序算法

    任意给定一个有向图,设计一个算法,对它进行拓扑排序。拓扑排序算法思想:a.在有向图中任选一个没有前趋的顶点输出;b.从图中删除该顶点和所有以它为尾的弧;c.重复上述a、b,直到全部顶点都已输出,此时,顶点输出...

    拓扑排序 整体 拓扑排序

    拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序拓扑排序

    有向图的拓扑排序

    对于有向图进行拓扑排序,图使用邻接矩阵的存储结构。

    c语言实现图的拓扑排序

    C语言实现图的拓扑排序

    c++实现拓扑排序

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

    简单拓扑排序——源码

    拓扑排序源码,程序简单易懂,注释详细。希望对学习数据结构的朋友有所帮助。

    拓扑排序关键路径算法C语言完整代码

    拓扑排序关键路径算法C语言完整代码,vs2013下编译运行通过

    拓扑排序-课程设计(源码、课程设计说明书)

    题目内容:输出有向网的拓扑排序序列。 拓扑排序的基本思想为: 1)从有向图中选出一个无前驱的顶点输出; 2)将此顶点和以他为起点的弧删除; 3)重复1)2)直到不存在无前驱的顶点; 4)若此时输出的顶点数小于有...

    拓扑排序与关键路径(C++版)

    拓扑排序与关键路径,在日常生活中,一项大的工程可以看作是由若干个子工程(这些子工程称为“活动” )组成的集合,这些子工程(活动)之间必定存在一些先后关系,即某些子工程(活动)必须在其它一些子工程(活动...

    数据结构课设拓扑排序源代码(教学计划安排)

    数据结构课设报告,包括完整源代码,用拓扑排序算法安排有先后制约关系的课程的教学计划。

    AOV网与拓扑排序

    C实现的拓扑排序,有详细注释,有问题的我们一起讨论

    图的最短路径、拓扑排序和关键路径

    图的最短路径、拓扑排序和关键路径相关算法描述,有c++code

    拓扑排序 数据结构 c和 C++源程序代码

    拓扑排序 数据结构 c和 C++源程序代码 拓扑排序 数据结构 c和 C++源程序代码

    基于邻接表存储的图的拓扑排序算法

    基于邻接表存储的图的拓扑排序算法,学习C++和理解数据结构很有帮助

    拓扑排序和关键路径课设

    阅读了《数据结构(C语言)》的经典著作后...本次算法课程设计运用所学的图论的拓扑排序和关键路径,去实现工程中的花费时间和顺利进行问题。拓扑排序主要用于检验工程能否施工,关键路径主要用于看出工程施工时间消耗。

    C# 图 拓扑排序

    C# 图 拓扑排序

    图(拓扑排序)

    【拓扑排序】 任务:编写函数实现图的拓扑排序。 ........................................................................................................................

    图 拓扑排序 深度搜索 广度搜索 最小生成树

    图 拓扑排序 深度搜索 广度搜索 最小生成树

    拓扑排序--课程表

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

Global site tag (gtag.js) - Google Analytics