from http://www.cnblogs.com/shanyou/archive/2006/11/16/562861.html

查看Castle的代码,在Castle.Core中内部的数据结构采用图,排序使用的拓扑排序算法:
       对于一条有向边(u,v),定义u < v;满足所有这样条件的结点序列称为拓扑序列。拓扑排序就是求一个有向图的拓扑序列的算法。
一个有向图顶点的拓扑序列不是惟一的。并不是任何有向图的顶点都可以排成拓扑序列,有环图是不能排的。
例子:比如排课问题,比如士兵排队问题等。
       拓扑排序在实际生活中和算法中都有很大的应用。比如要排一下几门课程的先后次序,我们可以把课程抽象成结点,把什么课是什么课的基础抽象成边,那么该图的一个拓扑序列就是这些课的一个可行的先后次序。各种语言的编译器都用到了拓扑排序。
    数学基础:
    什么是拓扑排序(Topological Sort)?简单地说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。
    回顾离散数学中关于偏序和全序的定义:
        若集合X上的关系R是自反的、反对称的和传递的,则称只是集合X上的偏序关系。
        设R是集合X上的偏序(Partial Order),如果对每个x,y∈X必有xRy或yRx,则称R是集合X上的全序关系。
    直观地看,偏序指集合中仅有部分成员之间可比较,而全序指集合中全体成员之间均可比较。[例如],图7.25所示的两个有向图,图中弧(x,y)表示x≤y,则(a)表示偏序,(b)表示全序。若在(a)的有向图上人为地加一个表示v2≤v3的弧(符号“≤”表示v2领先于v3),则(a)表示的亦为全序,且这个全序称为拓扑有序(Topological Order),而由偏序定义得到拓扑有序的操作便是拓扑排序。

 
AOV-网及其拓扑有序序列产生的过程
(a)AOV-网;(b)输出v6之后;(c)输出v1之后;(d)输出v4之后;(e)输出v3之后;(f)输出v2之后

[思想]:
    一、从有向图中选取一个没有前驱的顶点,并输出之;
    二、从有向图中删去此顶点以及所有以它为尾的弧;
    重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。没有前驱 -- 入度为零,删除顶点及以它为尾的弧-- 弧头顶点的入度减1。

[人度为零的顶点拓扑排序算法]:
    Status Topological Sort(ALGraph G){
    //有向图G采用邻接表存储结构。
    //若G无回路,则输出G的顶点的1个拓扑序列并返回OK,否则ERROR。
         FindInDegree(G,indegree); //对各顶点求入度indegree[0..vernum-1]
        InitStack(S);
        for(i=0;i<G.vexnum; ++i)
        if(!indegree[i])Push(S,i) //建零入度顶点栈,s入度为0者进栈
        count=0; //对输出顶点计数
        while (!StackEmpty(S)) {
            Pop(S,i);
            printf(i,G.vertices[i].data); ++count; //输出i号顶点并计数
            for(p=G.vertices[i].firstarc;p; p=p—>nextarc) {
                k=p—>adivex; //对i号顶点的每个邻接点的入度减1
                if(!(--indegree[k]))Push(S,k);//若入度减为0,则入栈
            }//for
        }//while
        if(count<G.vexnum) return ERROR; //该有向图有回路
        else return OK;
    }//TopologicalSort 
   算法 ,总的时间复杂度为O(n+e)。

作者: 自由、创新、研究、探索……
出处:http://shanyou.cnblogs.com/
版权:本文版权归作者和博客园共有

转载于:https://www.cnblogs.com/eric-blog/archive/2011/01/04/1925659.html

【zz】如何去理解 拓扑排序算法相关推荐

  1. 如何理解拓扑排序算法(转)

    对于一条有向边(u,v),定义u < v:满足所有这样条件的结点序列称为拓扑序列.拓扑排序就是求一个有向图的拓扑序列的算法. 一个有向图顶点的拓扑序列不是惟一的.并不是任何有向图的顶点都可以排成 ...

  2. vant coupon 时间戳如何计算_计软考研双日练 | 如何计算拓扑排序算法的时间复杂度?...

    ☝☝☝ 软件工程考研独家平台 撰稿 | 康康哥 编辑 | 丽丽姐 本文由懂计算机.软件工程的博士师哥原创 双日练:NO.20200610 若将n个顶点e条弧的有向图采用邻接表存储,则拓扑排序算法的时间 ...

  3. JavaScript实现topologicalSort拓扑排序算法(附完整源码)

    JavaScript实现topologicalSort拓扑排序算法(附完整源码) Comparator.js完整源代码 LinkedListNode.js完整源代码 LinkedList.js完整源代 ...

  4. C++实现topological sort拓扑排序算法(附完整源码)

    C++实现topological sort拓扑排序算法 C++实现topological sort拓扑排序算法完整源码(定义,实现,main函数测试) C++实现topological sort拓扑排 ...

  5. C++使用kahn实现topological sort拓扑排序算法(附完整源码)

    C++使用kahn实现topological sort拓扑排序算法 C++使用kahn实现topological sort拓扑排序算法完整源码(定义,实现,main函数测试) C++使用kahn实现t ...

  6. 邻接表存储 - 拓扑排序算法

    拓扑排序:用下面的例子介绍------> ---------------------------------------------------------------------------- ...

  7. 理解计数排序算法的原理和实现

    计数排序(Counting sort)是一种稳定的线性时间排序算法,其平均时间复杂度和空间复杂度为O(n+k),其中n为数组元素的个数,k为待排序数组里面的最大值.同样具有线性时间排序的算法还有桶排序 ...

  8. E. Pattern Matching(题意理解+拓扑排序)

    E. Pattern Matching 首先p[mtj]p[mt_j]p[mtj​]必须能够匹配所给字符sjs_jsj​,然后把所有能够匹配的sjs_jsj​的其他模板串也找出来,这些必须放在p[mt ...

  9. 有向图的拓扑排序算法JAVA实现

    一,问题描述 给定一个有向图G=(V,E),将之进行拓扑排序,如果图有环,则提示异常. 要想实现图的算法,如拓扑排序.最短路径--并运行看输出结果,首先就得构造一个图.由于构造图的方式有很多种,这里假 ...

最新文章

  1. ORB_SLAM2中Tracking线程
  2. Spring的属性依赖检查
  3. C#中DataTable的一些用法
  4. POJ2594 最小路径覆盖
  5. 41.虚拟存储器以及相关算法
  6. 直播回放 | 科技赋能零售金融业务转型
  7. ReportViewer教程(13)-交互式排序
  8. python给生活带来哪些改变_Python - 笔记1
  9. 什么是SCM供应链管理
  10. 机器学习:概念学习FIND-S算法C++实现
  11. comboxedit不可输入_javafx combobox在edit状态下无法选择
  12. 金蝶kis商贸版系统服务器,上海金蝶kis商贸版软件系统
  13. 多伦多大学计算机硕士读几年,多伦多大学计算机硕士申请条件
  14. 使用Consol线连接路由器
  15. win下brat安装与使用
  16. 我热爱计算机作文450字,热爱音乐的我作文450字
  17. 卸载红蜘蛛多媒体网络教室
  18. 谷歌Chrome 操作系统基于浏览器的OS
  19. linux开源社区贡献代码,4岁小萝莉向Linux内核贡献代码修复「漏洞」而且代码已经合并到内核...
  20. SQL Server 2012 Express 和 SSMS 安装与配置

热门文章

  1. linux arm 常用服务,ARM、linux常用服务器+交叉编译工具链
  2. mysql5.5多实例配置_mysql-5.5.32多实例配置
  3. 一万的阶乘c语言方法,求10000的阶乘(c语言代码实现)
  4. 实现在Windows下安装Lighttpd的方法
  5. linux命令join与paste
  6. 日记-致我那易逝的时光
  7. 解一元二次方程的C++实现
  8. 基于Spark MLlib平台的协同过滤算法---电影推荐系统
  9. 183. Customers Who Never Order
  10. 转:国内优秀npm镜像推荐及使用