具有最小违规边数的循环图的拓扑排序

时间:2013-06-17 13:01:10

标签: algorithm graph-theory graph-algorithm directed-graph topological-sort

我正在寻找一种方法,在给定的定向未加权图上执行拓扑排序,包含循环。结果不仅应包含顶点的排序,还应包含给定排序违反的边集。这组边缘应该是最小的。

由于我的输入图可能很大,我不能使用指数时间算法。如果不可能在多项式时间内计算最优解,那么对于给定的问题,启发式算法是否合理?

2 个答案:

答案 0 :(得分:11)

Eades,Lin和Smyth提议A fast and effective heuristic for the feedback arc set problem。原始文章位于付费专区后面,但可以从here获得免费副本。

有一种拓扑排序算法可以通过选择一个没有传入弧的顶点,在图形上减去顶点的递归,并将该顶点预先添加到顺序来构建顶点顺序。 (我正在递归地描述算法,但你不必那样实现它。)Eades-Lin-Smyth算法也可以查找没有传出弧的顶点,追加它们。当然,可能会发生所有顶点都有传入和传出弧。在这种情况下,选择传入和传出之间具有最高差异的顶点。毫无疑问,这里有实验的空间。

具有可证明的最坏情况行为的算法基于线性编程和图形切割。这些都很整洁,但保证不太理想(log ^ 2 n或log n log log是所需弧数的n倍),我怀疑有效的实现将是一个非常好的项目。

答案 1 :(得分:0)

受 Arnauds 答案和其他有趣的拓扑排序算法的启发,我创建了 cyclic-toposort 项目并将其发布在 github 上。 cyclic_toposort 完全符合您的要求,因为它可以快速对有向循环图进行排序,从而提供最少数量的违规边。如果需要,它还可以选择提供处于同一拓扑级别(因此可以同时激活)的最大节点分组。

如果问题仍然与您相关,那么如果您查看我的项目并告诉我您的想法,我会很高兴!

这个项目对我自己的神经网络拓扑研究很有用,所以无论如何我都必须创建这样的东西。我这么晚才回答你的问题,以防其他人偶然发现这个帖子来寻找同样的问题。