【问题标题】:Minimize set of edges in a directed graph keeping connected components最小化有向图中的边集,保持连通分量
【发布时间】:2013-02-03 14:52:15
【问题描述】:

这是完整的问题:

假设我们有一个有向图 G = (V,E),我们想找到一个图 G' = (V,E'),它具有以下性质:

  1. G' 与 G 具有相同的连通分量
  2. G' 与 G 具有相同的组件图
  3. E' 被最小化。也就是说,E' 尽可能小。

这是我得到的:

首先,运行强连通分量算法。现在我们有了强连接的组件。现在转到每个强连接组件,并在该 SCC 内做一个简单的循环;也就是说,唯一重复的节点是开始/结束节点的循环。这将最小化每个 SCC 的边。

现在,我们需要最小化 SCC 之间 的边。唉,我想不出办法。

我的 2 个问题是:(1)算法先于关于最小化边缘之间 SCC 的部分听起来正确吗? (2) 如何最小化 SCC 之间的边缘。

对于 (2),我知道这相当于最小化 DAG 中的边数。 (将 SCC 视为顶点)。但这似乎对我没有帮助。

【问题讨论】:

  • 抱歉我的无知:“组件图”是什么意思?我不明白 1. 和 2. 之间的区别。

标签: algorithm graph-theory directed-acyclic-graphs edges clrs


【解决方案1】:

关于第 2 步,最小化 SCC 之间的边,可以随机选择一个顶点,运行 DFS,只保留每对 (root, end) 的最长路径,同时删除其他路径。将搜索到的所有顶点存储在一个列表 L 中。

选择另一个顶点,如果存在于L中,则跳到下一个顶点;如果没有,请重复上述过程。

【讨论】:

    【解决方案2】:
    1. 该算法似乎是正确的,只要您允许封闭游走(即重复顶点)。可能不存在适当的循环(例如在“8”形组件中)并且找到它们是 NP 难的。

    2. 似乎通过它们连接的有序组件对对组件间边进行分组并在每组中只留下一条边就足够了。

    【讨论】:

    • 两个强连通分量之间只能有一个方向的弧;所以考虑无序对就足够了。
    • @FalkHüffner 是的,但实际上您需要对这些对进行排序,以便生成无序对的规范表示:-)
    • @Rafał Dowgird 谢谢!但是有几个问题:(1)什么是正确的周期,(2)我不明白你的2在说什么。您是说您只是在 SCC 图中连接的每对 SCC 之间留下一条边?这如何保留属性:G' 与 G 具有相同的组件图。
    • @user678392 (1) 正确循环是没有顶点出现两次的循环 (2) 组件图中的组件 A 和 B 之间存在一条边,前提是 A 和 A 的任意两个顶点之间存在一条边原始图中的 B。所以只要组件之间至少存在一条原始边,组件图就会被保留。
    猜你喜欢
    • 2018-03-01
    • 1970-01-01
    • 2013-05-01
    • 2010-12-04
    • 1970-01-01
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    相关资源
    最近更新 更多