Algorithm 检测打破所有循环的最小边数的算法

Algorithm 检测打破所有循环的最小边数的算法,algorithm,graph,directed-graph,Algorithm,Graph,Directed Graph,是否有一种算法将有向图作为输入,并作为输出提供“断开”的最小边数,以防止循环 例如,上图中的循环为: A、 B、C、D A、 B,E E、 G,H,F 以及打断所有边的最小边数: A-B,断开2个循环 例如,断开1个循环 当循环彼此嵌套并共享边时,情况会变得更加复杂 我目前的方法是找到所有的循环,按最常见的边分组,按顺序desc,并在循环仍然没有从以前的迭代中中断的情况下按顺序中断它们 我试过几种方法,它们都会随着它们断裂边的数量而变化——我在寻找理论上可能的最小值 有没有一个既

是否有一种算法将有向图作为输入,并作为输出提供“断开”的最小边数,以防止循环

例如,上图中的循环为:

  • A、 B、C、D
  • A、 B,E
  • E、 G,H,F
以及打断所有边的最小边数:

  • A-B,断开2个循环
  • 例如,断开1个循环
当循环彼此嵌套并共享边时,情况会变得更加复杂

我目前的方法是找到所有的循环,按最常见的边分组,按顺序desc,并在循环仍然没有从以前的迭代中中断的情况下按顺序中断它们

我试过几种方法,它们都会随着它们断裂边的数量而变化——我在寻找理论上可能的最小值

有没有一个既定的算法可以做到这一点?

这是NP难问题。Wikipedia没有针对中小型图形的精确算法,所以让我建议一个

使用整数规划解算器库,例如,我们为每个弧制定了一个整数规划,其中0表示保留弧,1表示删除弧。目标是最小化这些变量的总和

现在,我们需要指定约束,但通常会有指数级的循环数,随着图形的增长,这将很快压倒解算器。相反,请执行以下操作:

  • 求解整数规划(最初,无约束)
  • 使用宽度优先搜索在保留边中查找最短循环(如果有)
  • 如果存在循环,则添加相应变量之和必须大于或等于1的约束,然后返回步骤1。否则,当前的解决方案是最优的