拓扑排序的原理与实现

什么是拓扑排序?拓扑排序顾名思义是一种排序算法,它用于给有向图排序。有向图是由一组顶点和一组有方向的边组成的图,每条有方向的边都连接着有序的一对顶点,因此A -> B代表A可以到达B,并不代表B就能到达A。拓扑排序的结果就是一个有向图的顶点序列(或称为拓扑序列)。 举例:计算机课程的安排想要学习《C++程序设计》就需要先学习《计算机导论》想要学习《数据结构和算法》就需要先学习《C++程序设计...
摘要由CSDN通过智能技术生成

什么是拓扑排序?

拓扑排序顾名思义是一种排序算法,它用于给有向图排序。

有向图是由一组顶点和一组有方向的边组成的图,每条有方向的边都连接着有序的一对顶点,因此A -> B代表A可以到达B,并不代表B就能到达A。

拓扑排序的结果就是一个有向图的顶点序列(或称为拓扑序列)。

 

举例:计算机课程的安排

想要学习《C++程序设计》就需要先学习《计算机导论》

想要学习《数据结构和算法》就需要先学习《C++程序设计》

想要学习《网络操作系统》就需要先学习《计算机导论》

由此可以看出,这些活动都是有序的,每门课程就是图中的顶点,而有向边便是学习的顺序。你不能先学习《C++程序设计》,再学习《计算机导论》。就好比你不能先脱内衣,再脱外套一样。

那么,有向图是否就能拓扑排序呢?答案是不一定的。当图中存在环路时,比如学习A之前要学习B,学习B之前又要学习A,那么顺序就不可控了(到底A在前还是B在前?),故拓扑排序的充要条件是它是有向无环图。AOV网(顶点活动网)就是一种有向无环图。

 

同时,拓扑排序有时是不唯一的,如上图,学习顺序可以是:

《计算机导论》 ->  《C++程序设计》 -&g

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值