多项式时间内的最大匹配和路径匹配计数
1. 团宽度介绍
团宽度是在无向、非空的带标签图上通过构造方法引入的概念。设 $G_i$ 是图 $G$ 中标签为 $i$ 的顶点构成的子图。我们定义单元素图 $S_i$ 为只有一个标签为 $i$ 的顶点且没有边的带标签图,并引入以下构造操作:
-
重命名
:$\rho_{i \to j}(G)$ 是将图 $G$ 中所有标签 $i$ 替换为标签 $j$ 后的图。
-
不相交并
:$(V_1, E_1) \oplus (V_2, E_2) = (V_1 \cup V_2, E_1 \cup E_2)$。
-
边创建
:$\eta_{i,j}((V, E)) = (V, E \cup {(v_1, v_2) | v_1 \in G_i, v_2 \in G_j})$。
团宽度 $\leq k$ 的图类是包含单元素图 $S_i$,且在 $\rho_{i \to j}$、$\oplus$ 和 $\eta_{i,j}$($1 \leq i, j \leq k$)操作下封闭的最小图类。换句话说,图 $G$ 的团宽度,记为 $cwd(G)$,是使用单元素图以及重命名、不相交并和边创建操作来构造 $G$ 所需的最小标签数。
对于未带标签的图 $G$,我们将所有顶点标记为标签 1 来定义其团宽度,这必然是最优标记,因为任何标记都可以重命名为单色标记。注意,阶为 $n$ 的图的团宽度至多为 $n$。
一些已知结果如下:
|图的类型|团宽度限制|
| ---- | ---- |
|$(5, 2)$ - 交叉弦图|$\leq 3$|
|cographs 图|$cwd(G) \leq 2$|
|有界直径的平面图|有界团宽度|
|树宽 $\leq k$ 的图类|团宽度 $\leq 3.2k - 1$|
一个 $l$ - 表达式是使用 $S_i$、$\rho_{i \to j}$、$\eta_{i,j}$ 和 $\oplus$($i, j \leq l$)且符合每个操作的元数的项,它可以更方便地用树结构表示。如果 $G$ 是与根节点关联的图,我们称这个项是 $G$ 的 $l$ - 表达式,它证明了 $G$ 的团宽度 $\leq l$。
计算一般图的最小团宽度是 NP - 难的。目前最好的近似算法由 Oum 和 Seymour 提供,该算法以图 $G$ 和整数 $c$ 为输入,线性时间内返回 $G$ 的 $2^{3c + 2}$ - 表达式,或者证明图的团宽度大于 $c$。这意味着我们可以通过对 $c = 1, 2, \cdots$ 应用该算法,在二次时间内为团宽度为 $k$ 的图计算 $2^{3k + 2}$ - 表达式。对于 $(5, 2)$ - 交叉弦图,可以在线性时间内计算 3 - 表达式。
一个 $l$ - 表达式如果每个边创建操作 $\eta_{i,j}$ 都应用于 $G_i$ 和 $G_j$ 中没有两个顶点相邻的图,则称为无冗余的。任何 $l$ - 表达式都可以在线性时间内转换为无冗余的 $l$ - 表达式。
2. 算法框架
算法的输入是一个有 $n$ 个顶点的图 $G$ 及其 $l$ - 表达式,输出是 $G$ 中对象(如匹配、路径)的数量。该过程通过使用表达式树在构造的每一步对这些对象进行计数:从叶子节点开始,在处理完一个节点的所有子节点后再处理该节点。最后,树的根节点的值就是算法的输出。为避免繁琐的情况分析,我们假设请求范围 ${0 \cdots n}$ 之外的任何向量的值都返回 0。同时,$\Delta_r(l)$ 是向量 $(\delta_{i,r})
{1 \leq i \leq l}$,$\Delta
{r,s}(l)$ 是向量 $(\delta_{i,r} \cdot \delta_{j,s})
{0 \leq i \leq j \leq l, (i,j) \neq (0 ,0)}$,其中 $\delta
{i,j}$ 是 Kronecker 函数:
[
\delta_{i,j} =
\begin{cases}
1, & \text{如果 } i = j \
0, & \text{否则}
\end{cases}
]
3. 最大匹配计数
计算具有 $n$ 个顶点的图的最大匹配数可以在关于 $n$ 的多项式时间内完成(但关于 $l$ 是指数级的)。我们不能直接将之前的框架应用于最大匹配,因为对于 $G = \eta_{i,j}(G’)$ 的最大匹配 $M$ 和 $G’$ 中的诱导匹配 $M’$,$M’$ 不一定是最大的。不过,我们可以跟踪 $G’$ 中在 $M$ 中被覆盖的顶点,这些顶点必须构成 $M’$ 未覆盖的子图的顶点覆盖。
图 $G = (V, E)$ 的匹配 - 覆盖对是一对 $(m, c)$,满足:
- $m \subseteq E$ 是 $G$ 的一个匹配(即没有顶点被覆盖超过一次)。
- $c \subseteq V$ 是 $m$ 未覆盖的子图的顶点覆盖(即每条边至少被覆盖一次)。
我们证明了计算具有 $n$ 个顶点的图的匹配 - 覆盖对的数量可以在关于 $n$ 的多项式时间内完成。设 $M = (m_i) {1 \leq i \leq l}$ 和 $C = (c_i) {1 \leq i \leq l}$ 是两个非负整数向量。对于图 $G$,如果匹配 - 覆盖对 $(m, c)$ 满足对于所有 $i$,$m$ 覆盖 $G_i$ 中的 $m_i$ 个顶点且 $c$ 使用 $G_i$ 中的 $c_i$ 个顶点,则称 $(m, c)$ 满足条件 $\phi_{M,C}(G)$,我们用 $mc_{M,C}(G)$ 表示满足 $\phi_{M,C}(G)$ 的对的数量。注意,最大匹配恰好是覆盖为空的对,因此 $G$ 的最大匹配数为 $\sum_{k \leq n} mc_{k \cdot \Delta_{1,0}}(G)$。
下面是不同操作下 $mc_{M,C}(G)$ 的计算方法:
-
单元素图 $S_i$
:
[
mc_{M,C}(S_i) =
\begin{cases}
1, & \text{如果 } M = 0 \text{ 且 } C = 0 \text{ 或 } \Delta_i \
0, & \text{否则}
\end{cases}
]
-
重命名操作 $G = \rho_{i \to j}(G’)$
:
[
mc_{M,C}(G) = \sum_{M’:(M,M’) \vdash \varphi_{i,j}} \sum_{C’:(C,C’) \vdash \varphi_{i,j}} mc_{M’,C’}(G’)
]
其中 $(X, X’) \vdash \varphi_{i,j} \Leftrightarrow
\begin{cases}
x_j = x’
i + x’_j \
x_i = 0 \
\forall k \notin {i, j}, x_k = x’_k
\end{cases}$
-
不相交并操作 $G = G_1 \oplus G_2$
:
[
mc
{M,C}(G) = \sum_{M_1 + M_2 = M} \sum_{C_1 + C_2 = C} mc_{M_1,C_1}(G_1) \cdot mc_{M_2,C_2}(G_2)
]
-
边创建操作 $G = \eta_{i,j}(G’)$
:
[
mc_{M,C}(G) = \sum_{q = 0}^n mc_{M’,C’}(G’) \cdot \binom{c’_i}{q} \cdot \binom{c’_j}{q} \cdot q!
]
其中 $M’ = M - q\Delta_i - q\Delta_j$,$C’ = C + q\Delta_i + q\Delta_j$
计算完所有大小的最大匹配后,可以在多项式时间内轻松计算完美匹配的数量和最小最大匹配的数量。
复杂度分析:
- 单元素操作有 $n$ 个,每个操作需要常数时间。
- 其他操作需要计算 $n^{2l}$ 个值。
- 边创建操作至多有 $n^2$ 个,线性时间处理。
- 不相交并操作有 $n - 1$ 个,每个需要 $O(n^{2l})$ 时间。
- 重命名操作至多有 $n$ 个,每个需要 $O(n^4)$ 时间。
- 最终求和需要 $O(n^l)$ 操作。
总体复杂度为 $O(n^{4l + 1})$($l \geq 2$)。对于 $(5, 2)$ - 交叉弦图,算法运行时间为 $O(n^{13})$。
以下是算法流程的 mermaid 流程图:
graph TD;
A[输入图 G 和 l - 表达式] --> B[初始化];
B --> C[从叶子节点开始处理];
C --> D{是否为单元素节点};
D -- 是 --> E[计算单元素节点的 mc 值];
D -- 否 --> F{是否为重命名操作};
F -- 是 --> G[计算重命名操作的 mc 值];
F -- 否 --> H{是否为不相交并操作};
H -- 是 --> I[计算不相交并操作的 mc 值];
H -- 否 --> J{是否为边创建操作};
J -- 是 --> K[计算边创建操作的 mc 值];
E --> L[处理下一个节点];
G --> L;
I --> L;
K --> L;
L --> M{是否到达根节点};
M -- 否 --> C;
M -- 是 --> N[输出根节点的 mc 值];
4. 路径和路径匹配计数
路径匹配(或线性森林)是路径的不相交并集,即一个无环的边集,使得没有顶点被覆盖超过两次。
计算团宽度 $\leq k$ 的图的路径数 $pth(G)$ 和路径匹配数 $pm(G)$ 可以在多项式时间内完成(但关于 $k$ 是指数级的)。
设 $K = (k_{i,j})
{0 \leq i \leq j \leq l, (i,j) \neq (0,0)}$ 是一个非负整数向量。如果图 $G$ 的路径匹配 $P$ 满足以下条件,则称 $P$ 满足条件 $\psi_K$:
- $\forall i > 0$,$G_i$ 中有 $k
{0,i}$ 个顶点未被 $P$ 覆盖。
- $\forall (i, j)$,$i \leq j$,$P$ 中有 $k_{i,j}$ 条路径的端点分别在 $G_i$ 和 $G_j$ 中。
我们用 $pm_K(G)$ 表示 $G$ 中满足 $\psi_K$ 的路径匹配的数量。如果 $i > j$,则 $k_{i,j} = k_{j,i}$。由于 $K$ 的大小为 $\frac{l(l + 3)}{2}$,我们在每一步计算大小为 $n^{\frac{l(l + 3)}{2}}$ 的表。
下面是不同操作下 $pm_K(G)$ 的计算方法:
-
单元素图 $S_i$
:
[
\forall K, pm_K(S_i) =
\begin{cases}
1, & \text{如果 } K = \Delta_{0,i} \
0, & \text{否则}
\end{cases}
]
-
重命名操作 $G = \rho_{i \to j}(G’)$
:
[
pm_K(G) = \sum_{K’:(K,K’) \vdash \varphi} pm_{K’}(G’)
]
其中 $(K, K’) \vdash \varphi \Leftrightarrow
\begin{cases}
k_{j,j} = k’
{j,j} + k’
{i,j} + k’
{i,i} \
\forall a \notin {i, j}, k
{a,j} = k’
{a,i} + k’
{a,j} \
\forall a, k_{a,i} = 0 \
\forall a \notin {i, j}, b \notin {0, i, j}, k_{a,b} = k’
{a,b}
\end{cases}$
-
不相交并操作 $G = G_1 \oplus G_2$
:
[
pm_K(G) = \sum
{K_1 + K_2 = K} pm_{K_1}(G_1) \cdot pm_{K_2}(G_2)
]
-
边创建操作 $G = \eta_{i,j}(G’)$
:
[
pm_K(G) = \sum_{K’} pm_{K’}(G’) \cdot N_{i,j}(K’, K)
]
其中 $N_{i,j}(K’, K)$ 表示 $G’$ 中满足 $\psi_{K’}$ 的路径匹配在 $G$ 中满足 $\psi_K$ 的扩展数量,且可以在 $O(n^{l(l + 4)})$ 时间内预先计算。
我们可以通过以下公式计算路径数 $pth(G)$ 和路径匹配数 $pm(G)$:
[
pth(G) = \sum_{0 \leq a \leq n} pm_{K(a)}(G) \text{ 其中 } K(a) = a \cdot \Delta_{0,1} + \Delta_{1,1}
]
[
pm(G) = \sum_{1 \leq a + 2b \leq n} pm_{K(a,b)}(G) \text{ 其中 } K(a,b) = a \cdot \Delta_{0,1} + b \cdot \Delta_{1,1}
]
复杂度分析:
|操作类型|操作数量|每个操作时间复杂度|总时间复杂度|
| ---- | ---- | ---- | ---- |
|单元素操作|$n$ 个|常数时间|$O(n)$|
|其他操作| - |计算 $n^{\frac{l(l + 3)}{2}}$ 个值| - |
|重命名操作| - |线性时间| - |
|不相交并操作|$n - 1$ 个|$O(n^{l^2})$ 时间|$O(n^{l^2 + 1})$|
|边创建操作| - |$O(n^{\frac{l(l + 3)}{2}})$ 时间| - |
总体复杂度为:
[
\begin{cases}
O(n^{l^2 + 4l}), & \text{如果 } l \leq 5 \
O(n^{\frac{3}{2}(l^2 + l) + 1}), & \text{如果 } l > 5
\end{cases}
]
对于 $(5, 2)$ - 交叉弦图,可以在线性时间内计算宽度为 $l = 3$ 的表达式,算法运行时间为 $O(n^{21})$。
以下是路径和路径匹配计数算法流程的 mermaid 流程图:
graph TD;
A[输入图 G 和 l - 表达式] --> B[初始化];
B --> C[从叶子节点开始处理];
C --> D{是否为单元素节点};
D -- 是 --> E[计算单元素节点的 pm 值];
D -- 否 --> F{是否为重命名操作};
F -- 是 --> G[计算重命名操作的 pm 值];
F -- 否 --> H{是否为不相交并操作};
H -- 是 --> I[计算不相交并操作的 pm 值];
H -- 否 --> J{是否为边创建操作};
J -- 是 --> K[计算边创建操作的 pm 值];
E --> L[处理下一个节点];
G --> L;
I --> L;
K --> L;
L --> M{是否到达根节点};
M -- 否 --> C;
M -- 是 --> N[输出根节点的 pm 值];
5. 结论
这些结果表明,限制团宽度是对 #P - 难问题输入的一种有效约束,使得可以使用多项式算法。能够在多项式时间内计算路径和路径匹配数是很有意义的,因为通常很难计算连通结构的数量。然而,使用类似方法尝试解决树(或森林)计数问题时,只得到了指数时间的算法。我们推测对于有界团宽度的图,树计数问题仍然是 #P - 完全的,这仍然是一个未解决的问题。
超级会员免费看
1068

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



