通过反转p弧来消除有向图中的循环

  • 本文关键字:有向图 循环 graph-theory
  • 更新时间 :
  • 英文 :


有人能帮我解决这个问题吗?或者给我一个如何解决这个问题的提示吗?

我们考虑给定城市的街道网络。证明如果我们可以通过创建最多p个阻塞来移除该网络中的所有循环(阻塞意味着阻塞街道的一条路(,那么我们可以通过反转最多p条街道的一个路来移除城市网络中的全部循环。

一组边,如果从有向图中删除,则使其成为非循环的,称为反馈弧集。让我们想象一下,你取图中最小的反馈弧集s(我们知道,它的大小最多为p(,并将其移除,留下一个非循环图。

现在,想象一下,将S中的任何一条单独的边添加回保留的DAG中。这必须引起一个循环——否则,我们不需要反馈集S中的边缘,因此S不是最小的。

然后我们可以问——这个循环究竟是如何产生的?好吧,由于DAG有一个拓扑排序,这个循环必须通过从DAG中的某个节点v沿着新添加的边回到祖先u来发生,祖先u在拓扑排序中出现得比v早,然后从该拓扑排序沿着节点的某个子序列回到v。

现在想象一下,你把这个边加回到图中,但你是通过反向(从u到v(把它加回来的。你可以争辩说,旧DAG的拓扑排序与新DAG完全相同,因为u在排序中已经在v之前。这意味着你只剩下一个DAG,不仅如此,旧的拓扑排序仍然是新DAG的有效拓扑排序!

正因为如此,你可以重复这个过程。从S中选取另一条边并将其添加回。这会导致一个循环,你可以说,这个循环同样可以通过从拓扑排序中的节点走到祖先,然后再往回走来形成。更准确地说,闭合的循环中至少有一个必须来自通过移除所有S而形成的DAG。因此,将该边的反向添加回图中不会产生任何循环,因为它保留了拓扑顺序。

这样做的净效果是,如果你有一组最小的边可以被删除以删除所有循环(比如说,最多删除p条边(,你可以反转所有这些边以删除所有周期(最多反转p条(。

希望这能有所帮助!

最新更新