能否借鉴Kahn算法思路,利用出度实现有向无环图的拓扑排序?
利用出度实现有向无环图(DAG)的拓扑排序(类比Kahn算法)
当然可以用出度来实现DAG的拓扑排序,这本质是Kahn算法的反向思路,核心逻辑完全相通,具体操作步骤如下:
- 找出当前图中出度为0的顶点(这类顶点没有任何后继节点,属于拓扑序列的末尾元素)
- 将这些顶点从图中移除,同时删除所有指向它们的入边(对应的,这些入边的起点的出度要减1)
- 重复上述两步,直到图中所有顶点都被处理完毕
需要注意的是:按这个步骤收集到的节点序列是逆拓扑序,把它反转之后,就能得到和传统Kahn算法(基于入度)输出一致的拓扑序列。
举个简单例子:如果DAG是A→B→C,出度为0的先是C,移除后B的出度变为0,接着移除B,最后移除A,收集到的序列是[C,B,A],反转后就是[A,B,C]——也就是常规的拓扑序。
这种思路的合理性在于:DAG中必然存在出度为0的节点(否则会出现环),和Kahn算法依赖的“DAG必有入度为0的节点”是对称的,都是通过逐步剥离边界节点来完成排序。
内容的提问来源于stack exchange,提问作者art
相关产品推荐
相关产品推荐

