algorithm - 有向无环图的拓扑排序

标签 algorithm sorting graph-algorithm topological-sort

如何为有向无环图输出所有可能的拓扑排序?例如,给定一个图,其中 V 指向 W 和 X,W 指向 Y 和 Z,X 指向 Z:

V --> W --> Y
      W --> Z
V --> X --> Z

您如何对该图进行拓扑排序以产生所有可能的结果?我能够使用广度优先搜索来获取 V、W、X、Y、Z,并使用深度优先搜索来获取 V、W、Y、Z、X。但无法输出任何其他类型.

最佳答案

论文 "Generating Linear Extensions Fast" by Pruesse and Ruskey 中给出了为给定 DAG 生成所有拓扑排序的算法(也称为生成偏序的所有线性扩展) .该算法的摊销运行时间与输出 呈线性关系(例如:如果它输出 M 个拓扑排序,则它的运行时间为 O(M))。

请注意,一般而言,您不可能真正拥有任何具有相对于输入大小有效的运行时的东西,因为输出的大小可能比输入的大小呈指数级增长。例如,一个完全断开连接的 N 个节点的 DAG 有 N!可能的拓扑排序。

关于algorithm - 有向无环图的拓扑排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24789735/

相关文章:

javascript - Mergesort - 自下而上比自上而下更快吗?

java - 如何在Java中的快速排序中计算比较和交换?

python - 关于 Josephus_problem

algorithm - 深度优先搜索的最坏情况时间复杂度

jquery - Angular JS : html table columns ordering not working

algorithm - 多个目的地的最高加权路径

algorithm - 如何将无向图转换为没有循环的有向图(Directed acyclic graph)

algorithm - 有向图广度优先搜索期间的边分类

Python跳转搜索算法不返回一个数字

c++ - 按字母顺序然后按长度对字符数组进行排序