Algorithm 关于tarjan算法,为什么可以';在考虑后缘时,我们不是采用低[v]而不是圆盘[v]吗?

Algorithm 关于tarjan算法,为什么可以';在考虑后缘时,我们不是采用低[v]而不是圆盘[v]吗?,algorithm,tarjans-algorithm,Algorithm,Tarjans Algorithm,我读了一篇关于Tarjan算法的文章, . 在本文中,作者提出了一个问题: 在第二种情况下,我们能用低[v]代替圆盘[v]吗。答案是否定的。如果你能想一想为什么答案是否定的,你可能理解了低音和光碟的概念 我不知道为什么。当我在中阅读类似的文章时,我发现代码可以是这样的: else if (w.onStack) then // Successor w is in stack S and hence in the current SCC v.lowlink := min(

我读了一篇关于Tarjan算法的文章, . 在本文中,作者提出了一个问题:

在第二种情况下,我们能用低[v]代替圆盘[v]吗。答案是否定的。如果你能想一想为什么答案是否定的,你可能理解了低音和光碟的概念

我不知道为什么。当我在中阅读类似的文章时,我发现代码可以是这样的:

     else if (w.onStack) then
    // Successor w is in stack S and hence in the current SCC
    v.lowlink  := min(v.lowlink, w.lowlink)
我想知道为什么作者说答案是否定的。 谢谢你回答我的问题。 祝你过得愉快。

我不能肯定(塔扬在他的原始论文中使用了
min(low,disc)
),但对我来说,任何一种方式都可以。当您搜索桥梁和/或连接点时,这当然很重要-在这种情况下,使用
low
意味着您可以向后跳多次(而不仅仅是使用一条边),从而跳过连接点。但是,在查找scc的情况下,您只需要知道是否可以转到同一scc中的某个较早顶点,因此,您可以制作
low[v]disc[v]
,这就是问题所在。使用
min(low,disc)
更接近于
low
函数的实际定义,而
low
函数反过来也存在于上述算法中,因此我想这就是
disc
出现在这里的原因。我不能确定(Tarjan在他的原始论文中使用了
min(low,disc)
),但对我来说这两种方法都可以。当您搜索桥梁和/或连接点时,这当然很重要-在这种情况下,使用
low
意味着您可以向后跳多次(而不仅仅是使用一条边),从而跳过连接点。但是,在查找scc的情况下,您只需要知道是否可以转到同一scc中的某个较早顶点,因此,您可以制作
low[v]disc[v]
,这就是问题所在。使用
min(low,disc)
更接近于
low
函数的实际定义,而
low
函数又出现在上述算法中,因此我想这就是
disc
出现的原因。