码迷,mamicode.com
首页 > 编程语言 > 详细

拓扑排序

时间:2015-03-10 17:21:17      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:数据结构   拓扑排序   


定义:有某个集合上的一个偏序得到该集合上的一个全序这样的操作称为拓扑排序。
该定义可以简单的理解为--将有向图中的顶点以线性方式进行排序。即对于任何连接自顶点u到顶点v的有向边uv,在最后的排序结果中,顶点u总是在顶点v的前面。


前提:一个有向图能被拓扑排序的充要条件就是它是一个有向无环图(DAG:Directed Acyclic Graph)。


偏序/全序关系:偏序和全序实际上是离散数学中的概念。

以选课的例子来描述这两个概念。假设我们在学习完了算法这门课后,可以选修机器学习或者计算机图形学。这个或者表示,学习机器学习和计算机图形学这两门课之间没有特定的先后顺序。因此,在我们所有可以选择的课程中,任意两门课程之间的关系要么是确定的(即拥有先后关系),要么是不确定的(即没有先后关系),绝对不存在互相矛盾的关系(即环路)。以上就是偏序的意义,抽象而言,有向图中两个顶点之间不存在环路,至于连通与否,是无所谓的。所以,有向无环图必然是满足偏序关系的。

理解了偏序的概念,那么全序就好办了。所谓全序,就是在偏序的基础之上,有向无环图中的任意一对顶点还需要有明确的关系(反映在图中,就是单向连通的关系,注意不能双向连通,那就成环了)。可见,全序就是偏序的一种特殊情况。回到我们的选课例子中,如果机器学习需要在学习了计算机图形学之后才能学习(可能学的是图形学领域相关的机器学习算法……),那么它们之间也就存在了确定的先后顺序,原本的偏序关系就变成了全序关系。


一个有向无环图的拓扑排序不一定是唯一的。


技术分享

以图G9为例子他的拓扑排序可以是

c0--c6--c7--c1--c4--c2--c3--c8--c5

c1--c4--c0--c2--c3--c5--c6--c7--c8

等等



拓扑排序

标签:数据结构   拓扑排序   

原文地址:http://blog.csdn.net/sun11462/article/details/44177103

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!