拓扑排序


参考资料及图片来源:《算法导论》P355-356
图的表示、深度优先搜索、广度优先搜索等先验知识

拓扑排序

1 定义

  对于一个有向无环图 G = ( V , E ) G=(V, E) G=(V,E)来说,其拓扑排序 G G G中所有节点的一种线性次序,该次序满足条件:如果图 G G G包含边 ( u , v ) (u, v) (u,v),则节点 u u u在拓扑排序中处于节点 v v v前面

  可以将图的拓扑排序看作是将图的所有节点在一条水平线上排开,图的所有有向边从左指向右。

2 一个例子

  下图给出了Bumstead教授(别管他是谁了)每天早上起床穿衣的一个次序图。图中可以很清楚地看到教授穿衣的一个优先次序。必须穿上某些衣服后才能穿其他衣服(先穿内裤才能套裤子)。有些衣服可以以任意顺序穿上(先穿袜子和先穿内裤没什么区别)。

在这里插入图片描述

  这就是一个有向无环图,有向边 ( u , v ) (u, v) (u,v)表明服装 u u u必须在服装 v v v之前穿上。对该有向无环图进行拓扑排序所获得的就是一种合理穿衣的次序。

  下图就是对上面图进行拓扑排序后的结果,将排序后的图放在一条水平线上展示出来,在该水平线上,所有的有向边都从左指向右。所有节点按照其完成时间的逆序排列。

在这里插入图片描述

3 伪代码

  通过深度优先搜索可以实现拓扑排序,如上图,节点次序为完成时间的逆序

T O P O L O G I C A L − S O R T ( G ) TOPOLOGICAL-SORT(G) TOPOLOGICALSORT(G):对有向无环图进行拓扑排序。

call DFS(G) to compute finishing times v.f for each vertex v
as each vertex is finished, insert it onto thefront of a linked list
return the linked list of vertices

4 Leetcode练习

  下面的题目可以用来练习拓扑排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值