关于算法:如何删除未加权有向图中的循环,以使边数最大化?

How to remove cycles in an unweighted directed graph, such that the number of edges is maximised?

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

更正式:所需的算法使用g并创建一组非循环图s,其中s中的每个图g'满足以下属性:

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

    在幼稚的方法中,可以删除所有可能的边缘组合,并在每次删除后检查是否无循环。在这种情况下,有一个强分支树的变化意味着坏的时间和空间复杂性。

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

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


    这个问题叫做反馈弧集。因为它是NP硬的,所以您不太可能找到一个可伸缩的快速算法。但是,如果您的实例很小,那么诸如B.Schwikowski和E.Speckenmeyer的论文"关于枚举反馈问题的所有最小解"中的算法可能会起作用。


    这可能有帮助:一种在有向图中枚举所有有向生成树的算法。


    如果您的目标是在尽可能保留图形层次结构(结构)的同时删除循环边(破坏循环),这项工作可能会有所帮助:https://github.com/zhenv5/breaking_cycles_in_noise_hierarchies