Algorithm 具有最小冲突边数的循环图的拓扑排序

Algorithm 具有最小冲突边数的循环图的拓扑排序,algorithm,graph-theory,graph-algorithm,directed-graph,topological-sort,Algorithm,Graph Theory,Graph Algorithm,Directed Graph,Topological Sort,我正在寻找一种对给定的有向无权图执行拓扑排序的方法,该图包含循环。结果不仅应包含顶点的顺序,还应包含给定顺序所违反的边集。这组边缘应最小 由于我的输入图可能很大,我不能使用指数时间算法。如果不可能在多项式时间内计算出最优解,那么对于给定的问题,什么样的启发式方法才是合理的呢?Eades、Lin和Smyth提出。原始文章在付费墙后面,但可以从以下网站获得免费副本 有一种拓扑排序算法,它通过选择一个没有引入弧的顶点,在图上递归减去顶点,并将该顶点预先添加到顺序来建立顶点顺序。(我以递归方式描述算法,

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


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

Eades、Lin和Smyth提出。原始文章在付费墙后面,但可以从以下网站获得免费副本

有一种拓扑排序算法,它通过选择一个没有引入弧的顶点,在图上递归减去顶点,并将该顶点预先添加到顺序来建立顶点顺序。(我以递归方式描述算法,但您不必以这种方式实现它。)Eades–Lin–Smyth算法也会查找没有传出弧的顶点并附加它们。当然,所有顶点都可能有传入和传出弧。在这种情况下,选择传入和传出差异最大的顶点。毫无疑问,这里有实验的空间


具有可证明最坏情况行为的算法基于线性规划和图割。这些都很好,但保证不太理想(需要的弧数是log^2 n或log n的n倍),我怀疑高效的实现将是一个相当大的项目。

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

如果这个问题仍然与你有关,那么如果你检查我的项目并让我知道你的想法,我会很高兴的


这个项目对我自己的神经网络拓扑研究很有用,所以我不得不创建类似的东西。我这么晚才回答你的问题,以防其他人在寻找同一个问题时偶然发现这条线索。

这不是吗?你可以通过对剩余的DAG进行拓扑排序来获得顺序。另外,你想要一个最小解(每个删除的弧都会在DAG中完成一个循环)还是一个最小解(删除的弧尽可能少)?@Davidisenstat实际上我不太在乎它是多还是少,我只需要分别处理它们。如果某些算法需要两倍的运行时间,并且只找到一个弧数较少的解决方案,那么它就不经济了。这个问题似乎是反馈弧集,但在这种情况下,这是NP难的,所以我们需要一个近似值。这个问题仍然时不时地收到一堆意见,我只是在手头的论文中遇到它,所以如果有人对大卫在最后一段中提到的近似算法感兴趣,他可能会提到“通过扩展度量的分而治之近似算法”,作者:偶数,Naor,Rao,Schieber,《ACM杂志》,第47卷,第4期,2000年7月,第585-616页,该算法甚至对加权有向图进行对数n近似。未加权最小反馈弧集问题的早期对数^2 n近似基于线性规划的(我们最小化要删除的边的数量)可在“多商品最大流最小割定理及其在设计近似算法中的使用”中找到,Leighton,Rao,《ACM杂志》,第46卷,第6期,1999年11月,第787–832页。