Graph “scc的编号是否可以?”;强连通分量;如果只有一条边添加到图形中,该值会增加吗?

Graph “scc的编号是否可以?”;强连通分量;如果只有一条边添加到图形中,该值会增加吗?,graph,Graph,我有一个关于算法中的SCC的问题。 在CLRS中,当一条边被添加到一个图中,没有补充节点时,SCC的数量可以相同或减少。 然后,我想假设一个最初有4个节点和4条边的图。 右图显示添加了一条边 左图有一个SCC。很好。 但是,我知道右边的图形不是一个SCC,而是两个SCC:一个是三角形形式,另一个只是一个节点形式。 我是否误解了这个概念? 许多网页都说SCC的数量不能增加。这是一个很容易忽略的要点!强连通分量(SCC)被定义为顶点的最大集合,使得集合中的任意两个顶点都可以彼此接触。“Maximal

我有一个关于算法中的
SCC
的问题。 在
CLRS
中,当一条边被添加到一个图中,没有补充节点时,
SCC
的数量可以相同或减少。 然后,我想假设一个最初有4个节点和4条边的图。 右图显示添加了一条边

左图有一个SCC。很好。 但是,我知道右边的图形不是一个SCC,而是两个SCC:一个是三角形形式,另一个只是一个节点形式。 我是否误解了这个概念?
许多网页都说SCC的数量不能增加。

这是一个很容易忽略的要点!强连通分量(SCC)被定义为顶点的最大集合,使得集合中的任意两个顶点都可以彼此接触。“Maximal”在这里是一个相当无害的词,但它起到了很大的作用

让我们深入了解如何定义SCC,以及为什么在添加边时,给定图形中的数字只能减少或保持不变。我的CLRS副本将有向图G=(V,E)的强连通分量定义为“顶点的最大集C”⊆ 对于C中的每一对顶点u和V,我们都有u⇝v和 v⇝u、 也就是说,顶点u和v彼此可以到达。“

这里有几个重要的词可能会被忽略。跳出到我面前的是“最大”、“两者”和“可达”。让我们按照我介绍的相反顺序来看这些。第一个是可到达的,这与您所期望的是一样的:如果一个顶点与另一个顶点之间存在某种路径,那么该顶点是可从另一个顶点到达的-也就是说,如果我们可以从第一个顶点开始,并一直跟踪相邻的边,直到到达第二个顶点。下一个重要的词是“两者”-不仅可以从v到达u,还可以从u到达v。我们可以开始理解为什么我们会关心两个顶点是否彼此都可以到达。如果 v可以从u到达,这意味着u也可以到达v可以到达的所有节点-如果反过来也是这样,那么u和v都可以到达所有相同的节点。在某种意义上,将它们视为可以到达的同一节点是合理的——暂时忽略所有关于效率、重量或距离的想法

现在,让我们检查一下我们将这组顶点视为SCC“最大”的想法。发布的第二个图没有两个SCC,但只有一个。为什么?因为您注意到的“节点形式”不是它自己的SCC-它是由图中所有顶点组成的单个SCC的一部分。一组顶点是最大的当且仅当我们不能包括图中的任何其他顶点而不丢失我们的属性,即集合中的每个顶点都可以从集合中的每个其他顶点到达-在某种意义上,我们希望集合中尽可能多的节点而不破坏它。您指出的“三角形形式”不是一个极大集,因为我们可以将“节点形式”添加到该集中,并且我们仍然可以从其他节点到达每个节点-事实上,因为我们只对极大集感兴趣,所以必须添加它,否则我们将把该节点留在表上

那么,如果我们添加一条边,我们如何知道图中SCC的数量只能保持不变或减少?我们可以证明这些是 可能通过例子。要显示SCC的数量可以保持不变,请想象一组具有循环的节点。如果我们假设在这个周期中节点之间存在一些尚不存在的边缘,我们可以添加它,并且我们没有增加SCC的数量,因为我们没有“获得”到任何我们无法到达的节点的访问权。若要显示数量可以减少,请假设有两个顶点,其中顶点a具有指向顶点的边 b、 因此,我们目前有两个SCC。如果我们把有向边从b加到a,那么我们现在只有一个SCC,集合{a, b}

我们如何知道SCC的数量不会增加?这是一个非常直观的论点-首先,请注意,由于图形中的所有顶点都包含在某些SCC中,因此我们创建更多SCC的唯一方法是将一些现有的SCC拆分。然而,我们永远不能通过增加一条边来做到这一点——如果我们看所有u和v的集合C,那么u⇝v和v⇝u、 添加一条新边不能破坏这样一个事实,即对于集合中的任何u和v,u和v仍然可以彼此访问。不可能通过添加边缘来分解现有SCC



1 Cormen,Thomas H.等人,《算法简介》。第三版,麻省理工学院出版社,2009年。

问题与版本控制无关——请不要垃圾邮件无关的标签(已删除)。