图的连通度问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图的连通度问题研究

1.图的连通度的定义

图要么是连通的,要么是不连通的。但对于任意连通图来说,它们的连通程度也可能是不同的。为了精确地体现连通的程度,下面将引入两个概念:边连通度和顶点连通度。

设G = (V, E)是一个n阶图。如果G是完全图K n,那么我们定义它的顶点连通度为

κ(K n) = n– 1

否则,定义它的顶点连通度为

κ(G) = min{|U| : G v-u是非连通的}

即最小顶点数,删除这些顶点便是非连通图。

图G的边连通度定义为从图G中删除边而使G非连通的最小边数,用λ(G)表示。

这里的图G=(V, E)代表无向图或有向图,且没有自环和重边。

下面将主要讨论无向图的边连通度,有向图的边连通度和顶点连通图可以以此类推。

2.无向图的边连通度

在无向图G中,令顶点v的度数deg(v)表示与顶点v相连的边的数目。无向图G的最小度δ(G)定义为:δ(G) = min{deg(v) | v属于G}。考虑有向图G中,v 的入度表示为in-deg(v),v的出度表示为out-deg(v),相应的最小度为:δ(G) = min{in-deg(v), out-deg(v)| v属于G}。在整篇文章中,图的点数用n表示,边数用m表示。

另u和v表示图G中的一对不相同的点。定义λ(u, v)表示从图G中删除最少的边,使得u和v之间不存在任何路径。在有向图G中,λ(u, v)表示从G中删除最少的弧(有向边),使得不存在任何从u到v的有向路径。注意到,在无向图中,有λ(u, v) =λ(v, u),在有向图中却不符合这个等式。

显然,λ(u, v)就是图中u和v的最小割。求两点之间的最小割,根据最大流

最小割定理,可以用最大流算法求解:令u为网络的源点,v为网络的汇点,每条边的容量为1,u到v的最大流便是u和v之间的最小割。预流推进算法可以在O(nm)时间复杂度下求出最大流。另外,每条边的容量都为1,可以用Hoproft

算法在)

O的时间复杂度下求出单位容量网络的最大流。具体算法的实现不在本文讨论范围之内,这里不再赘述。

显然,图G的λ(G)即所有点对的λ(u, v)的最小值。对于有n个点的无向图中,有n(n-1)/2个无序点对需要计算,而在有向图中有n(n-1)个有序点对需要计算。然而,经过证明,计算λ(G),远远不需要枚举这么多点对计算λ(u, v)。

考虑如下一个连通图G的抽象图,令S为图G中的一个最小边割集。

图1

在图1中,L和R分别表示被S分割开的两个点集,不妨叫L位于S的左侧,R位于S的右侧。注意到,u为位于S一侧的任意一个顶点,那么至少存在一个顶点v在S的另一侧,使得λ(u, v) =λ(G)。因此可以按如下方法求出λ(G):算法1

输入图G = (V, E)

1.令u为V中任意一个顶点,令X = V– {u}。

2.枚举X中的所有点v,用网络流求出λ(u, v)。

3.则λ(G) min{λ(u, v) | v X

}。

继续观察图1,如果能找到一个集合Y,满足Y既包含L中的点又包含R中的点,即Y∩L≠ Ø 且Y∩R≠ Ø,那么就能把算法一第一步中的V替换成Y,仍能求得正确的λ(G)。这样一个集合Y,叫做图G的λ覆盖(λ– covering)。显然,T越小,需要求网络流的次数越少。下面的分析将得到一个新的算法。

定理1:

如果λ(G) < δ(G) 那么有|L| > δ且|R| > δ (δ = δ(G))

证明:

设L = {v1, v2, …,v k},显然有

deg(v1) + deg(v2)+…+deg(v k) >= k·δ(1)

同样有

deg(v1)+deg(v2)+…+deg(v k) = 2|E()| + |S| (2)

这里,|E()|表示点集L包含的所有边的集合。

(1)(2)两式的等号成立,当且仅当是完全图的情况。因此联合(1),(2)两式可以得到δ·k≤k(k– 1) + |S|。

因为|S|=λ(G) < δ(G),所以有δ·k < k(k– 1) + δ。又因为L > 1即k >1(否则λ(G) = δ(G)),所以不等式两边同除以(k – 1),得到k > δ,即有|L| > δ 。

同理可以证明|R| >δ。

根据定理1,可以得到下面的一些推论:

推论1 :

当λ(G) < δ(G)时,那么L中至少存在一个点与S中的边不直接相连,R也同样。

推论1显然成立,否则|L| = δ。推论1也说明在这个情况下,图的直径大于等于3。

推论2 :

T为G的一个生成树,Y是T的非叶子顶点集合。如果λ(G) < δ(G),那么Y 是G的一个λ覆盖,也就是说L,R中至少有一个点在Y中。

分析:若L中顶点都是Y中的叶子顶点,那么就有|L| = |S| = δ,矛盾。

由推论2可以得到算法2:

算法2:

1.找到一棵生成树T,Y是T的非叶子顶点集合。

2.任选一个u,X = Y /{u}。

3.对于所有v属于X,求出λ(u, v)。

4.{}X v v u c ∈=|),(min λ

5.λ(G ) = min{c , δ(G )}

容易证明算法2的正确性:如果λ(G ) < δ(G ),那么Y 是G 的一个λ覆盖,则c 便是λ(G );否则λ(G ) = δ(G ),步骤5将得到正确答案。然而,求一个叶子顶点最少的生成树是NP-难问题。因此算法2比较算法1的优势是,仅仅减少了λ(u , v )的计算量,而并没有降低时间复杂度的级别。

下面介绍一种另一种求解较小的λ覆盖方法,也是基于生成树的。注意到推论2的证明也说明了当λ(G ) < δ(G ),L 或R 集合不可能只包含生成树的叶子顶点。也就是说在λ(G ) < δ(G )的情况下,令Y 为生成树T 的非叶子顶点集合,那么Y 和V (T )都是图G 的一个λ覆盖。下面的算法中,对于G 中的任意顶点u ,I (u )所有与u 相邻的边的集合,A (u )表示所有与u 相邻的顶点集合。

算法3 输入:图G

输出:生成树H (V , E ) 1.令V (H ) ← Ø,E (H ) ← Ø。

2.任选一个顶点,V (H ) ←)(}{u A u ⋃,E (H ) ←I (u )。

3.选择H 中的一个叶子结点w ,对于所有H 中的叶子结点r ,满足

|))()(()(||))()(()(|H V G V r A H V G V w A -⋂≥-⋂。

4.对于所有))()(()(H V G V w A v -⋂∈,把v 加入V (H ),把边wv 加入E (H )。 5.如果|E (H )| < |V (H )| - 1,那么转第3步,否则算法终止。

算法3是用贪心的方法生成叶子结点尽量多的生成树。由此可以得到求λ(G )

的另一个算法:

算法4:

1.用算法3找到一棵生成树H ,Y 是H 的非叶子顶点集合。

2.任选一个u ,若|Y | < |V (H ) – Y |,则X = Y /{u },否则X = (V (H ) – Y )/{u } 3.对于所有v 属于X ,求出λ(u , v )。 4.{}X v v u c ∈=|),(min λ

相关文档
最新文档