最小化有向图中保持连接组件的边集

时间:2013-02-19 02:22:40

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

以下是完整的问题:

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

  1. G'具有与G
  2. 相同的连接组件
  3. G'与G
  4. 具有相同的组件图
  5. E'被最小化。也就是说,E'尽可能小。
  6. 这是我得到的:

    首先,运行强连接组件算法。现在我们拥有强大的连接组件。现在转到每个强连接组件,在SCC内部进行简单的循环;也就是说,一个循环,其中唯一重复的节点是开始/结束节点。这将最小化每个SCC中的边缘

    现在,我们需要最小化 SCC之间的边缘。唉,我想不出这样做的方法。

    我的2个问题是:(1)关于 SCC之间的边缘最小化的部分先前是否合适? (2)如何最大限度地减少SCC之间的边缘。

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

2 个答案:

答案 0 :(得分:1)

  1. 算法似乎是正确的,只要您允许闭合行走(即重复顶点)。正确的循环可能不存在(例如,在“8”形状的组件中)并且发现它们是NP难的。

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

答案 1 :(得分:0)

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

选择另一个顶点(如果存在于L中),跳到下一个顶点;如果不是,请重复上述步骤。