Algorithm 从DAG创建强连接零部件

Algorithm 从DAG创建强连接零部件,algorithm,graph,directed-acyclic-graphs,Algorithm,Graph,Directed Acyclic Graphs,我试图从有向无环图中创建强连接的组件 输入是表单中的边列表 1 2 3 5 etc 我需要创建一个最小边集的输出点,将其添加到给定的图中,以生成强连接组件的图 有什么想法吗 以下是我正在寻找的一个例子: 根据输入: 1 3 1 4 2 3 2 4 5 7 5 8 6 8 6 9 输出将是添加以创建强连接组件所需的最小边数 输出: 3 1 4 5 7 6 8 1 9 2 如果我正确理解了您的问题,您应该使用图形的邻接矩阵表示。最初,它将是一个1的稀疏矩阵,或者是当前边所在的位置 使用矩阵的简

我试图从有向无环图中创建强连接的组件

输入是表单中的边列表

1 2
3 5
etc
我需要创建一个最小边集的输出点,将其添加到给定的图中,以生成强连接组件的图

有什么想法吗

以下是我正在寻找的一个例子:

根据输入:

1 3
1 4
2 3
2 4
5 7
5 8
6 8
6 9
输出将是添加以创建强连接组件所需的最小边数

输出:

3 1
4 5
7 6
8 1
9 2

如果我正确理解了您的问题,您应该使用图形的邻接矩阵表示。最初,它将是一个1的稀疏矩阵,或者是当前边所在的位置

使用矩阵的简单遍历,创建SCC所需的所有0元素->1,每个转换都将是需要添加的边

还有一个很好的wiki页面,显示了用于此目的的可能流行算法:


它推荐了最实用的方法和算法。

假设图中没有孤立的顶点,您只需添加max(| sources |,| sinks |)边即可使其强连接

设T={t1,…,tn}为汇,{s1,…,sm}为DAG的源。假设n2),(t2->s3),…,(tk−1->sk,(tk->s1)}。很容易看出,通过添加这些边,由M诱导的顶点在G中是强连通的

现在考虑G(t,s)中的剩余顶点。因为M最大,S中的每个顶点−M(分别为T−M) 应连接到T(分别为S)中的顶点−M) 。所以我们任意配对剩余的顶点,比如{(tk+1,sk+1),…,(tn,sn)},并在G中添加相应的有向边。对于每个剩余的源顶点源si(i属于{n+1,…,m}),我们在G中添加边(t1->si)。因此添加的边的总数是最大的(|源|,|汇|)

编辑:添加几个示例

对于输入中的示例,我们首先计算最大匹配,例如:

3--1
4--2
7--5
8--6
因此,我们添加了边:

3->2
4->5
7->6
8->1
4->5
6->9
11->1
匹配中不存在的剩余(汇)顶点是9,因此我们将从9到匹配中的任何源顶点添加弧,例如
9->1

下面是另一个示例,说明了算法的所有步骤:

输入图形:

12 3   5    9 10  (sources)
\|/   /|\    \/
 4   6 7 8   11   (sinks)
最大匹配:

4--1
6--5
11--9
因此,我们添加了边:

3->2
4->5
7->6
8->1
4->5
6->9
11->1
现在剩下的汇是
{7,8}
,剩下的源是
{2,3,10}
。我们将7与say 2任意配对,将8与say 3任意配对,并添加:

7->2
8->3
最后,剩余(源)顶点为10,我们添加:

4->10

不清楚你的意思是什么。每个顶点本身形成一个强连接的组件。所以你不必添加任何边。但我想你心里有一个不同的问题?@krjampani你说的是真的…但是当有一个图,它们可能没有连接时,这些就变成了组件。我正在尝试创建一个算法来连接它们有效地ct这些未连接的图,以便它们成为强连接组件。因此,是否要将每个弱连接组件转换为强连接组件?如果弱连接组件是DAG,则可以通过将所有可能的边从汇顶点添加到源顶点来使其强连接。这些也要最小。@krjampani这很有意义!我正试图把它的复杂性降低到线性时间。这可能吗?想法?你能在图中添加新的顶点以使其强连接吗?你到底想要一个强连接的组件吗?你能提供一个你想要的例子吗?我刚刚阅读了算法还有两个后续问题。1.从我的阅读来看,这些算法似乎是用来识别强连接的组件,而不是找到需要添加哪些边来创建它们,因此我不确定如何实现。2.如果我使用邻接矩阵表示,并简单地将所有0个元素设为1来创建新的edge,我最终会得到一个完全连通的图,不是吗?不是创建强连通组件所需的最小边数谢谢!不过我很难理解它…你认为你可以用我的示例数据一步一步地研究它吗?我目前正在做这件事,但我不太清楚。我真的很感激e it.不客气。添加了几个示例。希望它们能更清楚地表达出来。投票一百万次!但是,我确实有几个更清楚的问题…首先,你能解释更多关于最大匹配的内容吗?以及如何识别它吗?其次,我数了7条边添加到你的示例中。根据假设,应该只有5条边吗n添加的顶点的最小数量应为MAX(源、汇),因为源=5,汇=5?*添加的边(非顶点)的数量您是对的。第二个示例存在一个小问题。现在已修复。但请注意,源的数量为6,因此需要添加6条边。