Algorithm 图强连通的线性时间算法

Algorithm 图强连通的线性时间算法,algorithm,graph,graph-theory,Algorithm,Graph,Graph Theory,我们有一个弱无环有向图 此外,我们还给出了一个集合a和集合B,集合a包含G的顶点,这些顶点的阶数为零,集合B包含的顶点的阶数为零。(A的尺寸小于B的尺寸) 除此之外,我们还知道,如果A和B中的项目具有特定顺序(例如A=a1、a2、…、am和B=b1、b2、…、bn),则DFS从ai访问bi(1)开始≤ 我≤ m) 是否有可能设计一个线性时间算法,通过向其添加尽可能少的边,使G强连接?为j=1,…,m-1添加弧bj->aj+1,为j=m,…,n添加弧bj->a1 生成的图是强连接的,因为a和b通

我们有一个弱无环有向图

此外,我们还给出了一个集合a和集合B,集合a包含G的顶点,这些顶点的阶数为零,集合B包含的顶点的阶数为零。(A的尺寸小于B的尺寸)

除此之外,我们还知道,如果A和B中的项目具有特定顺序(例如A=a1、a2、…、am和B=b1、b2、…、bn),则DFS从ai访问bi(1)开始≤ 我≤ m)

是否有可能设计一个线性时间算法,通过向其添加尽可能少的边,使G强连接?

为j=1,…,m-1添加弧bj->aj+1,为j=m,…,n添加弧bj->a1

生成的图是强连接的,因为a和b通过添加的弧和从ai到bi的路径是强连接的,并且对于每个节点x,存在i,j,使得原始图中存在从ai到x的路径以及从x到bj的路径


我们不能使用更少的弧,因为必须向b1、…、bn中的每一个添加一个传出弧。

编辑-以下不会生成具有最少链接的解决方案:

你可以在线性时间内跑步。我建议您这样做,并注意“在任何后续组件之前不会识别强连接组件”。因此,图中的第一个强组件不能是任何其他组件的后续组件。我建议,每次您发出一个强连接的组件(没有后续组件),然后添加一个链接,将其连接到第一个组件。我建议您在每次实质上通过对strongconnect()的非递归调用重新启动Tarjan算法时也添加一个链接,将第一个组件连接到重新启动的顶点


通过这些链接,您可以从第一个强组件到每个其他组件,以及从每个其他组件到第一个强组件。-不幸的是,这不一定是链接最少的解决方案-请参阅下面Per的第二条评论。

“DFS从ai访问bi(1)开始≤ 我≤ m) “不明白。(1)A中有重复元素,B中为空,或者(2)你的图有一个特殊的性质,从零度的顶点开始,我们可以得到严格的零度以外的一个顶点(3)没有这些(在这种情况下给出你的解释)。这很简单。但有一个问题。我所问的原始声明中有歧义。如果你有一个有向无环图,它的无向版本是一个连通图,有向零度(a)的顶点数小于或等于无向零度(B)的顶点数,这并不意味着你在a和B之间有匹配。如果你能证明这一点,就去做吧。没有这个事实,这不是答案。@智慧之风为什么我必须证明当前问题措辞中的假设?这个解决方案可能有问题。考虑一个由两个环组成的图,x和y,以及孤立点。从X到Y以及从Y到隔离点之间存在一个链接。孤立点是集合B的唯一成员。它作为一个非循环图连接,但不是强连接,因为你无法从Y到X,或从孤立节点到Y。因为A没有元素,你的建议不会添加任何链接。我问过(你的图是否有特殊属性)(DFS从ai访问bi(1)开始)≤ 我≤ m) )?作者问:“A和B是一组顶点,它们没有提供额外的信息”。这是因为具有指定属性的图可能没有A到B匹配(其中A和B是A集)@mcdowella A和B是非空的,因为G被假定为非循环的。如何处理多个没有前导的组件?我的意图是,没有前导的辅助组件是Tarjan算法通过非递归调用重新启动的组件,因此它们从第一个组件获得链接,并且可以从第一个组件访问。他们的继任者,或他们自己,获得了第一个组件的链接,完成了这个循环。然而,由于我在你的答案上提出的观点是错误的,也许我在这里也错了?如果我正确理解了你的算法,那么在图{a1->b1,a1->b2,a2->b2}上,强分量{a1}可能是第一个发射的,然后是{b1}和{b2},因此b1和b2获得了返回a1的链接。连接a1和a2总共需要3个链路,而连接b1->a2、b2->a1需要2个链路。