拓扑排序就是
给你一个有向图
让你按照点的优先级来输出点的一种排序算法
到底什么是点的优先级呢?
比如说,在这个图中,a结点指向b结点,那我们就可以说a的优先级比b高。
所以我问问你,优先级最高的结点有什么特点?
当然,就是没人指向它,即入度为0的点
那我再问问你,优先级第二高的结点有什么特点?
哈哈,不是优先级最高结点指向的结点就是第二高结点哦
优先级第二高的结点,就是在你把优先级第一高的结点移走之后(同时把他们的边也移走)
剩下这张图中的最高级结点,也就是移走一级节点之后入度就变成0的那些结点
同理,我想你也直到第三级别结点,第四级别结点的含义了把?
拓扑排序就是按照这样的顺序把结点按照等级输出
当然,同等级之间的结点顺序随意
那么,给你一张图,你该如何实现图的拓扑排序呢?
其实,细心的人会发现,我刚才在解释优先级第二高的结点的含义时,就已经把拓扑排序的方法讲出来了
这种方法,也被称作kahn算法
步骤:
1.把一张有向图的所有入度为0的结点输出
2.把这些节点删除,并且把他们的边删除
3.然后在剩余的这张图里面再次找到入读为0的结点
4.继续把他们输出,然后删除
…
一直循环,直到图中所有结点都被你遍历完之后,就结束了。
怎么样,是不是很简单?
[算法学习no17]拓扑排序
最新推荐文章于 2022-08-01 16:47:02 发布
拓扑排序是对有向无环图(DAG)进行排序的一种算法,它按照结点的优先级从高到低输出。优先级高的结点为入度为0的结点,即没有其他结点指向它。Kahn算法通过迭代找到并删除入度为0的结点来实现拓扑排序。每次删除一个结点及其对应的边,直到所有结点都被处理。该过程确保了同等级结点的输出顺序不固定。
摘要由CSDN通过智能技术生成