Algorithm 如何去除无权有向图中的圈,从而使边的数目最大化?

Algorithm 如何去除无权有向图中的圈,从而使边的数目最大化?,algorithm,graph,graph-theory,directed-graph,cyclic,Algorithm,Graph,Graph Theory,Directed Graph,Cyclic,设G是一个包含圈的无权有向图。我正在寻找一种算法,它可以发现/创建所有非循环图G',由G中的所有顶点和G的一个子集边组成,小到足以使G'非循环 更正式:所需算法消耗G并创建一组非循环图S,其中S中的每个图G'满足以下属性: G'包含G的所有顶点 G'包含G的边的子集,因此G'是非循环的 G'的边数最大化。这意味着:没有满足属性1和2的G'',因此G''包含的边比G'多,并且G''是非循环的 背景:原始图G模拟元素之间的成对排序。由于图中存在循环,因此不能将其作为对所有元素的排序加以利用。因此,最

设G是一个包含圈的无权有向图。我正在寻找一种算法,它可以发现/创建所有非循环图G',由G中的所有顶点和G的一个子集边组成,小到足以使G'非循环

更正式:所需算法消耗G并创建一组非循环图S,其中S中的每个图G'满足以下属性:

  • G'包含G的所有顶点
  • G'包含G的边的子集,因此G'是非循环的
  • G'的边数最大化。这意味着:没有满足属性1和2的G'',因此G''包含的边比G'多,并且G''是非循环的
  • 背景:原始图G模拟元素之间的成对排序。由于图中存在循环,因此不能将其作为对所有元素的排序加以利用。因此,最大无环图G'应该对这种排序建立一个尽可能好的近似模型,尽可能多地尊重成对排序关系

    在一种简单的方法中,可以删除所有可能的边组合,并在每次删除后检查非循环性。在这种情况下,有一个分支强烈的变异树,意味着糟糕的时间和空间复杂性

    注意:问题可能与生成树有关,您可以将G'图定义为一种有向生成树。但请记住,在我的场景中,G'中的一对边可能具有相同的起始顶点或结束顶点。这与中使用的一些定向生成树的定义相冲突


    编辑:添加与生成树相关的直观描述、背景信息和注释。

    这可能会有所帮助:。

    此问题称为。因为它是NP难的,所以不太可能找到可伸缩的快速算法。但是,如果您的实例很小,那么像B.Schwikowski和E.Speckenmeyer的论文“关于列举反馈问题的所有最小解”中的算法可能会起作用。

    如果您的目标是在尽可能保留图层次(结构)的同时删除循环边(打破循环),这项工作可能会有所帮助:

    您是否希望枚举G的所有生成树@这个问题是相关的,但是生成树是无向图,而我需要一个有向图的解决方案。但多亏了你的提示,我在谷歌上搜索了“定向生成树”,找到了这个。这将是一个新的起点。至少维基百科的链接文章将生成树限制为无向图。但是你可以将“有向生成树”定义为一个由所有顶点组成的连通有向图——对我来说这似乎是一个有效的命名。wiki文章只讨论无向图,但对有向图的概括很简单。另外,要小心你链接到的文件;他们谈论的是问题的一个非常特殊的限制,可能与你的情况无关。无论如何,我认为我找到了一个更适用的参考(作为答案发布)。谢谢,不幸的是,本文中的定向生成树还有一个附加属性:一对边可能没有相同的起始顶点。在我的场景中,一对边可能具有相同的起始顶点。本文中的方法依赖于这一性质,因此不适用。我将更新我的问题,使这一点变得更清楚。谢谢你对这篇有趣的文章的提示。这很好地总结了这一系列问题。因此,我接受这个答案,因为它提供了明确的定义,并暗示了可能的解决办法。正如您已经指出的,很难为大型实例找到解决方案。在使用方法方法实现小实例的解算器之后,我们设法以不同的方式对原始问题域建模,因此可以省略NP难度。