图的生成树拥塞问题研究
1. 图的基本概念与生成树拥塞
在图论中,有许多重要的概念和定义。对于图 $G$,我们将 $v\in S$ 时 $N_G(v)$ 的并集记为 $N_G(S)$,顶点 $v$ 在图 $G$ 中的度定义为 $deg_G(v) = |N_G(v)|$。若 $deg_G(v) = |V(G)| - 1$,则称 $v$ 为图 $G$ 的通用顶点。
当有两个图 $G$ 和 $H$ 时,如果存在一个双射 $f : V(G) \to V(H)$,使得 ${u, v} \in E(G)$ 当且仅当 ${f(u), f(v)} \in E(H)$,我们就说 $G$ 和 $H$ 是同构的,记为 $G \simeq H$。假设 $V(G) \cap V(H) = \varnothing$,那么 $G$ 和 $H$ 的不相交并 $G \cup H$ 是一个顶点集为 $V(G) \cup V(H)$,边集为 $E(G) \cup E(H)$ 的图;而 $G$ 和 $H$ 的连接 $G \oplus H$ 是一个顶点集为 $V(G) \cup V(H)$,边集为 $E(G) \cup E(H) \cup {{u, v} | u \in V(G), v \in V(H)}$ 的图。
对于 $A, B \subseteq V(G)$,我们定义 $E_G(A, B) = {{u, v} \in E(G) | u \in A, v \in B}$。对于 $S \subseteq V(G)$,其边界边 $\theta_G(S)$ 定义为 $\theta_G(S) = E_G(S, V(G) \setminus S)$,且 $\theta_G(\varnothing) = \theta_G(V(G)) = \varnothing$。边 $e \in E(T)$ 的拥塞 $cng_{G,T}(e)$ 满足 $cng_{G,T}(e) = |\theta_G(A_e)|$,其中 $A_e$ 是 $T - e$ 的两个分量之一的顶点集。
若树 $T$ 以 $r \in V(T)$ 为根,我们用 $prt_T(v)$ 表示 $v \in V(T)$ 在 $T$ 中的父节点(根节点 $r$ 的父节点未定义),用 $Chd_T(v)$ 表示 $v \in V(T)$ 在 $T$ 中的子节点。显然,对于每个非根顶点 $v$,$N_T(v) = {prt_T(v)} \cup Chd_T(v)$。
加权图的生成树拥塞
图 $G$ 可能关联一个边权函数 $wei: E(G) \to Z^+$,有这样函数的图称为边加权图或加权图。未加权的图可以通过将每条边的权值设为 $1$ 视为加权图。对于加权图 $G$ 和 $F \subseteq E(G)$,我们定义 $wei(F) = \sum_{f\in F} wei(f)$。
边 $e$ 的拥塞定义为其绕行路径经过该边的边的权值之和。若 $e \in E(T)$ 分隔顶点集 $A$ 和 $B$,则 $cng_{G,T}(e) \geq wei(E(A, B))$。对于加权图 $G$,顶点 $v$ 的加权度定义为 $wdeg_G(v) = wei(\theta_G({v}))$,并且有命题:设 $G$ 是加权图,$S \subseteq V(G)$,则 $wei(\theta_G(S)) = \sum_{v\in S} wdeg_G(v) - 2wei(E(G[S]))$。
同时,加权图的生成树拥塞问题(STC)与未加权图的 STC 是等价的。具体来说,若从加权图 $G$ 中移除边 $e$,并在 $e$ 的两端添加 $wei(e)$ 条内部不相交的任意长度的路径(添加路径中的每条边权值为 $1$)得到图 $G’$,则 $stc(G) = stc(G’)$。
2. 图的分类
- 弦图 :没有长度大于三的诱导环的图。
- 分裂图 :其顶点集 $V(G)$ 可以划分为两个集合 $C$ 和 $I$,使得 $C$ 是 $G$ 的一个团,$I$ 是 $G$ 的一个独立集。显然,每个分裂图都是弦图。
-
余图(或可补约图)
:可以通过以下规则递归构造:
- $K_1$ 是余图;
- 若 $G$ 和 $H$ 是余图,则 $G \cup H$ 也是余图;
-
若 $G$ 和 $H$ 是余图,则 $G \oplus H$ 也是余图。
若 $G$ 是至少有两个顶点的连通余图,则 $G$ 可以表示为 $G_1 \oplus G_2$,其中 $G_1$ 和 $G_2$ 是非空余图。如果余图也是弦图,则称为弦余图,也称为平凡完美图和准阈值图。在弦余图的构造中,可以假设 $\oplus$ 的两个操作数之一是 $K_1$。
- 弦二分图 :没有长度大于四的诱导环的二分图。
- 链图 :二分图 $G = (X, Y; E)$ 中,若 $X$ 上存在一个序 $<$,使得 $u < v$ 意味着 $N_G(u) \subseteq N_G(v)$,则 $G$ 是链图。每个链图都是 $2K_2$ - 自由的,因此是弦二分图,且链图的团宽度至多为三。
团宽度是一个在某种意义上推广了树宽的图参数,许多困难问题对于有界团宽度的图可以高效解决。
3. 分裂图和链图的 STC 问题难度
证明了以下定理:
- 定理 3.1:STC 问题对于分裂图是 NP - 完全的。
- 定理 3.2:STC 问题对于链图是 NP - 完全的。
由于每个链图的团宽度至多为三,所以有推论:STC 问题对于团宽度至多为三的图是 NP - 完全的。
分裂图的 STC 问题难度
通过将 3 - 划分问题的一个实例 $A$ 归约为一个边加权分裂图 $G_A$,使得 $A$ 是肯定实例当且仅当 $stc(G_A) \leq k$ 对于某个 $k$ 成立,从而证明 STC 问题对于边加权分裂图(仅最大团中的边有权重)是 NP - 难的。然后,在多项式时间内将 $G_A$ 修改为未加权分裂图 $G’_A$,使得 $stc(G_A) = stc(G’_A)$,证明了定理 3.1。
具体构造 $G_A$ 如下:设 $A$ 是 3 - 划分问题的一个实例,令 $I = {u_i | 1 \leq i \leq 3m}$ 和 $C = {x} \cup V \cup W$,其中 $V = {v_i | 1 \leq i \leq m}$ 和 $W = {w_i | m + 1 \leq i \leq a_{3m}}$。图 $G_A$ 的顶点集为 $I \cup C$,$I$ 是独立集,$C$ 是团。每个 $u_i \in I$ 与 $V$ 中的所有顶点以及 $w_1, w_2, \ldots, w_{a_i}$ 相邻,其边集 $E(G_A)$ 定义为:
$E(G_A) = {{c, c’} | c, c’ \in C} \cup {{u, v} | u \in I, v \in V} \cup {{u_i, w_j} | u_i \in I, m + 1 \leq j \leq a_i}$
顶点的度分别为:$deg_{G_A}(u_i) = a_i$,$deg_{G_A}(v_i) = |C| + |I| - 1$,$deg_{G_A}(w_i) = |C| + |{j | a_j \geq i}| - 1$。
部分边有重权,设 $k = 2B + 2|C| + 2|I| - 15$,边权函数 $wei(e)$ 定义为:
[
wei(e) =
\begin{cases}
\alpha := (k + 1)/2, & \text{如果 } e = {x, v_i}\
\beta_i := k - deg_{G_A}(w_i) + 1, & \text{如果 } e = {x, w_i}\
1, & \text{否则}
\end{cases}
]
顶点的加权度分别为:$wdeg_{G_A}(u_i) = a_i$,$wdeg_{G_A}(v_i) = \alpha + |C| + |I| - 2 = k - B + 6$,$wdeg_{G_A}(w_i) = k$。
引理 3.4 表明:设 $k = 2B + 2|C| + 2|I| - 15$,则 $A$ 是肯定实例当且仅当 $stc(G_A) \leq k$。
为了证明未加权分裂图的 STC 问题的 NP - 难性,先将 3 - 划分问题的实例 $A$ 归约为加权分裂图 $G_A$,再利用引理 3.5:设 $G$ 是边加权分裂图,其顶点集划分为 $(C, I)$($C$ 是团,$I$ 是独立集),若加权边仅在 $G[C]$ 中,且最大边权为 $w_{max}$,则可以在 $O(w_{max} \cdot |E(G)|)$ 时间内从 $G$ 得到一个边未加权的分裂图 $G’$,使得 $stc(G) = stc(G’)$。由于 $G_A$ 的最大边权受 $B$ 和 $m$ 的多项式函数限制,所以可以在多项式时间内构造未加权分裂图 $G’_A$ 和 $k \in Z^+$,使得 $A$ 是肯定实例当且仅当 $stc(G’_A) \leq k$。
链图的 STC 问题难度
给定 3 - 划分问题的一个实例 $A$,构造图 $G_A = (P, Q; E)$。令 $M = B + 3m - 4$ 和 $\gamma_i = |{a_j \in A | a_j \geq i}|$。定义顶点集 $P = U \cup V \cup W$ 和 $Q = X \cup Y \cup Z$ 如下:
$U = {u_i | 1 \leq i \leq m}$
$V = {v_i | m + 1 \leq i \leq a_{3m}}$
$W = {w_i | 1 \leq i \leq M - a_{3m}}$
$X = {x_i | 1 \leq i \leq 3m}$
$Y = {y_i | m + 1 \leq i \leq a_{3m}}$
$Z = {z_i | 1 \leq i \leq M - a_{3m}}$
边集 $E$ 定义为:
$E = (X \times U) \cup (Y \times (U \cup V)) \cup (Z \times (U \cup V \cup W)) \cup {{x_i, v_j} | x_i \in X, m + 1 \leq j \leq a_i} \cup {{y_i, w_j} | y_i \in Y, 1 \leq j \leq M - a_{3m} - \gamma_i}$
设 $G_0$ 和 $G_1$ 是 $G_A$ 的两个不相交副本,定义图 $H_A$ 为 $V(H_A) = V(G_0) \cup V(G_1)$,$E(H_A) = E(G_0) \cup E(G_1) \cup (P_0 \times P_1)$。
引理 3.6 表明 $H_A$ 是链图,引理 3.7 给出了 $H_A$ 中顶点度的关系:
|顶点|度的关系|
| ---- | ---- |
|$u^i_j$|$deg_{H_A}(u^i_j) = 2M + 2m$|
|$v^i_j$|$deg_{H_A}(v^i_j) = 2M - m + \gamma_j > 2M - m$|
|$w^i_j$|$2M - a_{3m} \leq deg_{H_A}(w^i_j) \leq 2M - m$|
|$x^i_j$|$deg_{H_A}(x^i_j) = a_i$|
|$y^i_j$|$deg_{H_A}(y^i_j) = M - \gamma_j < M$|
|$z^i_j$|$deg_{H_A}(z^i_j) = M$|
并且 $\Delta(H_A) = 2M + 2m$,$\delta(H_A) = a_1$。
引理 3.8 和引理 3.9 证明了 $A$ 是 3 - 划分问题的肯定实例当且仅当 $stc(H_A) \leq k$($k = 3M - m - 2$)。
下面是构造 $G_A$ 和 $H_A$ 的流程图:
graph TD;
A[3 - 划分实例 A] --> B[构造 GA 顶点集 I 和 C];
B --> C[定义 GA 边集 E(GA)];
C --> D[设置 GA 边权 wei(e)];
A --> E[构造 GA 顶点集 P 和 Q];
E --> F[定义 GA 边集 E];
F --> G[构造 G0 和 G1];
G --> H[构造 HA 顶点集和边集];
4. 指数时间精确算法
由于已经证明 STC 问题即使对于非常简单的图也是 NP - 完全的,而人们普遍认为 NP - 难问题无法在多项式时间内解决,所以需要快速的指数时间(或亚指数时间)算法。对于 STC 问题,虽然可以设计一个 $O^ (2^m)$ 或 $O^ (n^n)$ 时间的算法来检查输入图的所有生成树(其中 $n$ 和 $m$ 分别表示顶点数和边数),但这里将介绍一个运行时间为 $O^*(2^n)$ 的算法,它比朴素算法快得多。
设 $G = (V, E)$ 是一个给定的无向图,为了方便,用 $c(X)$ 表示 $|\theta_G(X)|$,且 $c(\varnothing) = c(V) = 0$。考虑一个拥塞至多为 $k$ 的生成树 $T$,将其视为以 $r \in V$ 为根的有根树,记为 $(T, r)$。设 $e = {u, v} \in E(T)$ 是 $T$ 的一条边,不失一般性,设 $u$ 是 $v$ 的父节点,那么 $e$ 在 $T$ 中的拥塞等于 $c(D_{T,r}(v))$,其中 $D_{T,r}(v)$ 表示 $v$ 在 $(T, r)$ 中的后代集合。因为 $T$ 的拥塞至多为 $k$,所以 $c(D_{T,r}(v)) \leq k$。反之,如果对于所有 $v \in V \setminus {r}$ 都有 $c(D_{T,r}(v)) \leq k$,那么 $T$ 的拥塞至多为 $k$。这是因为 $T$ 的边 $e$ 和 $V \setminus {r}$ 中的顶点 $v$ 存在一一对应关系,使得 $v$ 是 $e$ 的较深端点。总结这个观察得到以下引理:
引理 4.1:有根树 $(T, r)$ 的拥塞至多为 $k$ 当且仅当对于每个顶点 $v \in V \setminus {r}$,$c(D_{T,r}(v)) \leq k$。
这个引理提示了一种动态规划方法。将子集 $X \subseteq V$ 和顶点 $v \notin X$ 的对 $(X, v)$ 称为 $V$ 的有根子集,根据定义,对于 $V$ 的有根子集 $(X, v)$,$X \neq V$。如果存在 $G[X \cup {v}]$ 的有根生成树 $(T, v)$,使得对于所有 $u \in X$,$c(D_{T,v}(u)) \leq k$,则称 $V$ 的有根子集 $(X, v)$ 是好的。这里的 $c$ 是 $G$ 的割函数,而不是 $G[X \cup {v}]$ 的。根据定义,当 $X = \varnothing$ 时,$(X, v)$ 是好的。注意,存在 $G$ 的拥塞至多为 $k$ 的有根生成树 $(T, r)$ 当且仅当有根集 $(V \setminus {r}, r)$ 是好的。
以下引理提供了一个递归公式,构成了算法的基础:
引理 4.2:设 $(X, v)$ 是 $V$ 的一个有根子集,且 $|X| \geq 1$,则 $(X, v)$ 是好的当且仅当至少满足以下条件之一:
1. 存在顶点 $u \in X \cap N_G(v)$,使得 $c(X) \leq k$ 且 $(X \setminus {u}, u)$ 是好的。
2. 存在非空真子集 $Y \subset X$,使得 $(Y, v)$ 和 $(X \setminus Y, v)$ 都是好的。
引理 4.1 和 4.2 直接给出了一个 $O^ (3^n)$ 时间的动态规划算法,但快速子集卷积方法可以使问题在 $O^ (2^n)$ 时间内解决。
设 $S$ 是一个有限集,对于两个函数 $f, g: 2^S \to R$,它们的子集卷积是一个函数 $f * g: 2^S \to R$,定义为 $(f * g)(X) = \sum_{Y \subseteq X} f(Y)g(X \setminus Y)$。给定所有 $X \subseteq S$ 的 $f(X)$ 和 $g(X)$,可以在 $O^*(2^n)$ 总时间内计算所有 $X \subseteq S$ 的 $(f * g)(X)$,其中 $n = |S|$。
回到生成树拥塞问题,设 $v \in V$ 是任意顶点,定义函数 $f_v: 2^{V \setminus {v}} \to R$ 如下递归式:若 $X = \varnothing$,则 $f_v(X) = 1$;否则,
[
f_v(X) = \sum_{u \in X \cap N_G(v)} f_u(X \setminus {u}) \max{0, k - c(X) + 1} + \sum_{\varnothing \neq Y \subset X} f_v(Y)f_v(X \setminus Y)
]
其中空和定义为 0。容易验证,对于每个 $v \in V$ 和每个 $X \subseteq V \setminus {v}$,$f_v(X)$ 是非负的。
以下引理将函数 $f_v$($v \in V$)和好的有根集联系起来:
引理 4.3:设 $(X, v)$ 是子集 $X \subseteq V \setminus {v}$ 和顶点 $v \in V$ 的对,则 $f_v(X) > 0$ 当且仅当 $(X, v)$ 是 $V$ 的一个好的有根子集。
为了应用子集卷积方法,使用以下函数。对于每个 $i \in {0, 1, \ldots, n - 1}$(其中 $n = |V|$)和 $v \in V$,定义 $f^i_v: 2^{V \setminus {v}} \to R$ 为:
[
f^i_v(X) =
\begin{cases}
f_v(X), & \text{如果 } |X| \leq i\
0, & \text{如果 } |X| > i
\end{cases}
]
可以得到以下性质:
1. 对于所有 $v \in X$ 和 $X \subseteq V \setminus {v}$,$f^{n - 1}_v(X) = f_v(X)$。
2. 对于所有 $v \in V$ 和 $X \subseteq V \setminus {v}$,
[
f^0_v(X) =
\begin{cases}
1, & \text{如果 } X = \varnothing\
0, & \text{否则}
\end{cases}
]
3. 对于所有 $i \in {1, \ldots, n - 1}$,$v \in V$ 和 $X \subseteq V \setminus {v}$,
[
\begin{align
}
f^i_v(X) &= \sum_{u \in X \cap N_G(v)} f^{i - 1}
u(X \setminus {u}) \max{0, k - c(X) + 1} + \sum
{\varnothing \neq Y \subset X} f^{i - 1}
v(Y)f^{i - 1}_v(X \setminus Y)\
&= \sum
{u \in X \cap N_G(v)} f^{i - 1}
u(X \setminus {u}) \max{0, k - c(X) + 1} + \sum
{Y \subseteq X} f^{i - 1}
v(Y)f^{i - 1}_v(X \setminus Y) - 2f^{i - 1}_v(\varnothing)f^{i - 1}_v(X)\
&= \sum
{u \in X \cap N_G(v)} f^{i - 1}_u(X \setminus {u}) \max{0, k - c(X) + 1} + (f^{i - 1}_v * f^{i - 1}_v)(X) - 2f^{i - 1}_v(\varnothing)f^{i - 1}_v(X)
\end{align
}
]
算法基于这些公式,其流程如下:
1. 初始化:对于所有 $v \in V$,计算 $f^0_v(X)$。
2. 迭代计算:对于 $i$ 从 1 到 $n - 1$,对于所有 $v \in V$ 和 $X \subseteq V \setminus {v}$,根据上述公式计算 $f^i_v(X)$。
3. 结果判断:检查是否存在 $r \in V$,使得 $f^{n - 1}_r(V \setminus {r}) > 0$,如果存在,则存在拥塞至多为 $k$ 的生成树。
下面是算法流程的 mermaid 流程图:
graph TD;
A[初始化 i = 0] --> B[计算所有 v 和 X 的 f^0_v(X)];
B --> C{i < n - 1};
C -- 是 --> D[计算 i + 1 时所有 v 和 X 的 f^(i+1)_v(X)];
D --> E[i = i + 1];
E --> C;
C -- 否 --> F[检查是否存在 r 使 f^(n - 1)_r(V \setminus {r}) > 0];
F -- 是 --> G[存在拥塞至多为 k 的生成树];
F -- 否 --> H[不存在拥塞至多为 k 的生成树];
综上所述,通过对图的基本概念、图的分类以及不同图类中 STC 问题难度的研究,我们深入了解了 STC 问题的复杂性。同时,指数时间精确算法为解决该问题提供了一种相对高效的方法,虽然它仍然是指数时间算法,但比朴素算法有了显著的改进。未来可以进一步研究如何优化该算法,或者探索对于更特殊图类的更高效算法。
超级会员免费看
22

被折叠的 条评论
为什么被折叠?



