[算法学习no17]拓扑排序

拓扑排序是对有向无环图(DAG)进行排序的一种算法,它按照结点的优先级从高到低输出。优先级高的结点为入度为0的结点,即没有其他结点指向它。Kahn算法通过迭代找到并删除入度为0的结点来实现拓扑排序。每次删除一个结点及其对应的边,直到所有结点都被处理。该过程确保了同等级结点的输出顺序不固定。
摘要由CSDN通过智能技术生成

拓扑排序就是
给你一个有向图
让你按照点的优先级来输出点的一种排序算法
到底什么是点的优先级呢?
比如说,在这个图中,a结点指向b结点,那我们就可以说a的优先级比b高。
所以我问问你,优先级最高的结点有什么特点?
当然,就是没人指向它,即入度为0的点
那我再问问你,优先级第二高的结点有什么特点?
哈哈,不是优先级最高结点指向的结点就是第二高结点哦
优先级第二高的结点,就是在你把优先级第一高的结点移走之后(同时把他们的边也移走)
剩下这张图中的最高级结点,也就是移走一级节点之后入度就变成0的那些结点
同理,我想你也直到第三级别结点,第四级别结点的含义了把?
拓扑排序就是按照这样的顺序把结点按照等级输出
当然,同等级之间的结点顺序随意
那么,给你一张图,你该如何实现图的拓扑排序呢?
其实,细心的人会发现,我刚才在解释优先级第二高的结点的含义时,就已经把拓扑排序的方法讲出来了
这种方法,也被称作kahn算法
步骤:
1.把一张有向图的所有入度为0的结点输出
2.把这些节点删除,并且把他们的边删除
3.然后在剩余的这张图里面再次找到入读为0的结点
4.继续把他们输出,然后删除

一直循环,直到图中所有结点都被你遍历完之后,就结束了。
怎么样,是不是很简单?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值