NORTHLINE
← All recordsRECORD / 043
Algorithms

Parameterized algorithms

F is the family of sets over a universe U, k is a positive integer. The task is to check whether there exists a subfamily F' \subseteq F of size k that covers U, which means that e

Algorithms59 min read

Parameterized algorithms

6.1.1 Parameterized algorithms

Set Cover

parameterized algorithms 6.1.1

FF is the family of sets over a universe UU, kk is a positive integer. The task is to check whether there exists a subfamily F′⊆FF' \subseteq F of size kk that covers UU, which means that every element of UU belongs to some set of F′F'.

Theorem Given a Set Cover instance (U,F,k)(U,F, k), the minimum possible size of a subfamily F′⊆FF'\subseteq F that covers UU can be found in time 2∣U∣(∣U∣+∣F∣)O(1)2^{|U|}(|U|+|F|)^{O(1)}.

Proof. We define T[X,j]T[X,j] as the minimum possible size of a subset F′F' ⊆\subseteq {\lbrace F1,F2,...,Fj}F_{1},F_{2},...,F_{j}\rbrace that covers XX. If no such subset F′F' exists, then T[X,j]=+∞T[X,j]=+\infty. We compute all 2∣U∣(∣F∣+1)2^{|U|}(|F|+1) values T[X,j]T[X,j].

  • If j=0j=0, T[∅,0]=0T[\emptyset,0]=0 while T[X,0]=+∞T[X,0]=+\infty for X≠0X\neq 0

  • else, let X⊆UX \subseteq U and 0<j≤∣F∣0\lt{j}\leq{|F|}, we have

    T[X,j]=min(T[X,j−1],1+T[X/Fj,j−1])T[X,j]=min(T[X,j-1],1+T[X/F_j,j-1])

Steiner Tree

parameterized algorithms 6.1.2

Steiner Tree in OIwiki

Let GG be an undirected graph on nn vertices and K⊆V(G)K \subseteq V(G) be a set of terminals, A Steiner tree for KK in GG is a connected subgraph HH of GG containing KK, that is, K⊆V(H)K \subseteq V(H).

The goal of this section is to design a dynamic-programming algorithm for Stenier tree with running time 3∣K∣nO(1)3^{|K|}n^{O(1)}, where n=∣V(G)∣n=|V(G)|.

Lemma For every D⊆KD \subseteq K of size at least 22, and every v∈V(G)∖Kv \in V(G)\setminus K, the following holds

T[D,v]=min{T[D′,u]+T[D∖D′,u]+dist(v,u)}T[D,v]=min\lbrace {T[D',u]+T[D\setminus D',u]+dist(v,u)} \rbrace

where T[D,v]T[D,v] means the minimum possible weight of a Steiner tree for D∪{v}D \cup \lbrace v \rbrace in GG, u∈V(G)∖Ku\in V(G)\setminus K and ∅\emptyset ≠\neq D′⊊DD' \subsetneq D

7.1 Treewidth

​ 该节是由树形DP的一个经典题目延伸而来。给你一个树,节点有权值,当你选择一个节点后,你获得该点的权值但其相邻节点不能被选,问能获得到的最大权值。

We shall call this problem Weighted Independent Set.

​ 由于树的结构特性,上述问题可以一遍 dfsdfs 跑掉,具体可以点上面的链接查看。

​ 那么,不是树的情况的该怎么解决呢?本节里介绍了网格图的解决方案,更具体一点,是"narrow grids"的子图。

Since the class of grids is not very broad, let us rather focus on subgraphs of grids.


下面给出一些规定,继续往下看的时候如果感到疑惑记得回来查查😵

  • GG:整个图,其为 k×Nk\times N 网格图的子图,kk 很小(比如, k=10k=10),NN很大(比如, N=106N=10^{6})
  • (i1,j1)(i_1, j_1) 和 (i2,j2)(i_2, j_2) 是相邻的当且仅当∣\vert i1−i2i_1-i_2 ∣\vert ++ ∣\vert j1−j2j_1-j_2 ∣\vert =1=1
  • XjX_j 为图 GG 的第 jj 列,即Xj=V(G)∩{(i,j):1≤i≤k}X_j=V(G) \cap \lbrace (i,j):1\leq{i}\leq{k}\rbrace
  • Gj=G[X1∪X2∪...∪Xj]G_j=G[X_1\cup X_2 \cup ... \cup X_j]
  • 对于 Y⊆XjY\subseteq X_j, c[j,Y]c[j,Y] 为Gj−YG_j-Y里independent setindependent\,set(即最上面描述的那种点集)可能的最大权值和。

从规定里也能看出来,我们就是要去求c[j,Y]c[j,Y]了


  • 对于j=1j=1的情况,暴力枚举:

For every Y⊆X1Y \subseteq X_1, we iterate through all possible subsets S⊆X1∖YS\subseteq X_1 \setminus Y , and for each of them we check whether it is an independent set.

要计算到所有的YY,总共的"check"次数:

∑ℓ=0∣X1∣(∣X1∣ℓ)2∣X1∣−ℓ=3∣X1∣≤3k\sum_{\ell=0}^{|X_1|}\dbinom{|X_1|}{\ell}2^{|X_1|-\ell}=3^{|X_1|}\leq3^k

上述式子要考虑选取 YY(枚举排列组合)和对每一个 YY 的情况枚举找独立集。

  • 对于j>1j\gt {1}的情况,dpdp去解:
c[j,Y]=maxS⊆Xj∖Y,S is independent{w(S)+c[j−1,N(S)∩Xj−1]}c[j,Y]={max}_{S\subseteq X_j \setminus Y,S\,is\, independent} \lbrace w(S)+c[j-1,N(S)\cap X_{j-1}]\rbrace

这里w(S)=∑v∈Sw(v)w(S)=\sum_{v\in S}w(v),注意SS是independent setindependent\, set,N(S)N(S)为SS在上一列的里完整网格图对应的点集(其实就是邻居),与Xj−1X_{j-1}取交就获得了所谓上一列里我们需要的forbidden setforbidden\, set,插点原文

Similarly, for j=1j = 1, we should iterate through all the possible ways a maximum weight independent set intersects column XjX_j. This intersection should be independent, of course, and moreover if we pick some v∈Xj∖Yv\in X_j \setminus Y to the independent set, then this choice forbids choosing its neighbor in the previous column Xj−1X_{j-1} (providing this neighbor exists).

treewidth

无论是哪种情况,计算量都在3k3^k· kO(1)k^{O(1)}以内,最后时间复杂度3k3^k · kO(1)k^{O(1)}·NN.

7.2 Treewidth

Path decomposition

图 GG 的一个路径分解是一个包 bagbag 的序列P=(X1,X2,...,Xr)P=(X_1,X_2,...,X_r),满足:

(P1)(P1) ⋃i=1rXi=V(G)\bigcup_{i=1}^{r}X_i=V(G),即 GG 的每个点都至少在一个包里.

(P2)(P2) 若边(u,v)(u, v)属于GG,那么存在一个 bag 同时包含了 uu 和 vv.

(P3)(P3) 若 u∈V(G)u \in V(G),且u∈Xi∩Xku\in X_i \cap X_k,i≤ki \leq k,那么有u∈Xju\in X_j,i≤j≤ki\leq {j}\leq{k}.


  • 路径分解的宽度 widthwidth: max1≤i≤r{max}_{1\leq{i}\leq{r}} ∣\vert XiX_i ∣\vert −1.-1.

  • 路径分解的路径宽度 pathwidthpathwidth ,即pw(GG): the minimum possible width of a path decomposition of GG.

  • (A,B)(A,B)是一个separationseparation 当: A∪B=V(G)A \cup B=V(G),且在 A∖BA \setminus B 和 B∖AB\setminus A 之间没有边相连,这时A∩BA\cap B就是这个separationseparation的separatorseparator(分隔符),∣\vert A∩BA\cap B ∣\vert称为orderorder.

  • 对于子集 A⊆V(G)A \subseteq V(G),边界borderborder: ∂(A)\partial(A) 由 AA 中拥有在 V(G)∖AV(G)\setminus A 里的邻居的点组成.

the set of those vertices of AA that have a neighbor in V(G)∖AV(G)\setminus A

Lemma 1 (⋃i=1jXi,⋃i=j+1rXi)(\bigcup_{i=1}^jX_i,\bigcup_{i=j+1}^rX_i) is a separationseparation of GG with separatorseparator Xj∩Xj+1X_j\cap X_{j+1}

​ 证明可用反证法,可能会用到上面的(P2)(P3)(P2)(P3).


一个路径分解是 nicenice 的,如果遵循下面的条件:

  • X1=Xr=∅X_1=X_r=\emptyset.
  • 对于每一个i∈{1,2,...,r−1}i\in \lbrace 1,2,...,r-1\rbrace,要么有一个点v∉Xiv\notin X_i且Xi+1=Xi∪{v}X_{i+1}=X_i\cup \lbrace v\rbrace(此时 Xi+1X_{i+1} 称为introduce  bagintroduce\,\,bag, Xi+1  introduces  vX_{i+1}\,\,introduces\,\,v),要么有一个点 w∈Xiw\in X_i 且 Xi+1=Xi∖{w}X_{i+1}=X_i \setminus \lbrace w\rbrace(类似的,称为forget  bagforget\,\,bag).

Let us note that because of (P3)(P3), every vertex of GG gets introduced and becomes forgotten exactly once in a nice path decomposition, and hence we have that rr, the total number of bags, is exactly equal to 2\vertV(G)∣+12\vertV(G)\vert+1.

Lemma 2 如果 GG 存在宽度为 pp 的路径分解,那么其也存在一个 nicenice 的宽度最大为 pp 的路径分解。另外,给定 GG 的宽度为 pp 的路径分解P=(X1,X2,...,Xr)P=(X_1,X_2,...,X_r),可在O(p2O(p^2·max(r,∣max(r,\vert V(G)∣))V(G)\vert))内求得 nicenice 的宽度 pp 路径分解


Tree decompositions

树分解是路径分解的一个延伸

图 GG 的一个树分解tree  decompositiontree\,\,decomposition是一个pair T=(T,{Xt}t∈V(T))\mathcal T=(T,\lbrace X_t\rbrace_{t\in V(T)}),其中 TT 是一个树,树的每个节点 tt 都分配有子点集 Xt⊆V(G)X_t\subseteq V(G),称为包 bagbag,遵循下面规则:

(T1)(T1) ⋃t∈V(T)Xt=V(G)\bigcup_{t\in V(T)}X_t=V(G),即图 GG 的每个点都至少在一个包里.

(T2)(T2) 对于图 GG 的每一条边 (u,v)(u,v),都存在树 TT 的一个节点 tt 满足 XtX_t 同时包含了 uu 和 vv .

(T3)(T3) 对于图 GG 的每一个点 uu,集合 Tu={t∈V(T):u∈Xt}T_u=\lbrace t\in V(T):u\in X_t\rbrace,对应的包中包含 uu 的节点集合,就得到了 TT 的一个连通子树.

​ the set of nodes whose corresponding bags contain uu, induces a connected subtree of T.


  • 树分解的宽度widthwidth:maxt∈V(T)\vertXt∣−1max_{t\in V(T)}\vertX_t\vert-1
  • 树分解的树宽度treewidthtreewidth,即tw(G):is the minimum possible width of a tree decomposition of GG.

Lemma 3 设 TT 是图 GG 的一个树分解,abab 是 TT 的一条边,那么森林 T−abT-ab 包含了两个相连的部分 Ta(containing  a)T_a(containing\,\,a),Tb(containing  b)T_b(containing\,\,b). 设 A=⋃t∈V(Ta)XtA=\bigcup_{t\in V(T_a)}X_t,B=⋃t∈V(Tb)XtB=\bigcup_{t\in V(T_b)}X_t,那么就有 ∂(A),∂(B)⊆Xa∩Xb\partial(A),\partial(B)\subseteq X_a \cap X_b,同样(A,B)(A,B)就是图 GG 以 Xa∩XbX_a \cap X_b为separatorseparator的一个separationseparation.


一个树分解是 nicenice 的,如果满足:

  • Xr=∅,Xℓ=∅X_r=\emptyset,X_{\ell}=\emptyset,其中 rr 是树 TT 的根,ℓ\ell 是树的每一个叶子.
  • 任意不是叶子节点的节点都是下面三种类型之一:
    • Introduce  node\bold{Introduce\,\,node}: 节点 tt 恰好只有一个孩子 t′t' 且有 Xt=Xt′∪{v}X_t=X_{t'}\cup \lbrace v \rbrace,v∉Xt′v\notin X_{t'}此时我们说vv is introducedintroduced at tt.
    • Forget  node\bold{Forget\,\,node}: 节点 tt 恰好只有一个孩子 t′t' 且有 Xt=Xt′∖{w}X_t=X_{t'}\setminus \lbrace w \rbrace,w∈Xt′w\in X_{t'},此时我们说ww is forgottenforgotten at tt
    • Join  node\bold{Join\,\,node}: 节点 tt 有两个孩子 t1,t2t_1,t_2,且 Xt=Xt1=Xt2X_t=X_{t_1}=X_{t_2}

Note also that, by property (T3)(T3) of a tree decomposition, every vertex of V(G)V(G) is forgotten only once, but may be introduced several times.


Lemma 4 如果图 GG 允许一个宽度至多为 kk 的树分解,那么它也能做到一个宽度至多为 kk 的 nicenice 树分解. 另外,给定图 GG 的一个宽度为 kk 的树分解 T=(T,{Xt}t∈V(T))\mathcal T=(T,\lbrace X_t\rbrace_{t\in V(T)}),可以在 O(k2O(k^2·max(\vertV(T)∣max(\vertV(T)\vert,\vertV(G)∣))\vertV(G)\vert))内求得图 GG 的一个宽度为 kk 、拥有最多 O(k\vertV(G)∣)O(k\vertV(G)\vert)个节点的 nicenice 树分解

7.3.1 WeightedIndependentSet

设 T=(T,{Xt}t∈V(T))\mathcal T=(T,\lbrace X_t \rbrace_{t\in V(T)}) 是 nn 节点图 GG 的一个树分解,宽度至多为 kk,对于树上一节点 tt,t≠rt\neq r,令 VtV_t为树 TT 以 tt 为根的子树里的包的并集,包括 XtX_t. 那么根据Lemma 7.3有 ∂(Vt)⊆Xt\partial(V_t)\subseteq X_t.

This exactly formalizes the intuition that the subgraph induced by VtV_t can communicate with the rest of the graph only via bag XtX_t, which is of small size.


​ 将独立集问题与包 XtX_t 联系起来:令图 GG 的两个独立集 I1,I2I_1,I_2 满足 I1∩Xt=I2∩XtI_1\cap X_t=I_2\cap X_t,我们把 I1,I2I_1,I_2 在 VtV_t 里的点的权值加起来,并假设 w (I1∩Vt)>(I_1\cap V_t)\gtw(I2∩Vt)(I_2\cap V_t),那么就可以获得一个更好的方案 I2′I_2',通过把 I2I_2 里的 I2∩VtI_2 \cap V_t 替换成 I1∩VtI_1\cap V_t. 由前提 I1∩Xt=I2∩XtI_1\cap X_t=I_2\cap X_t 以及结论 ∂(Vt)⊆Xt\partial(V_t)\subseteq X_t 我们可以知道 I2′I_2' 依然是独立集,即我们从 w (I1∩Vt)>(I_1\cap V_t)\gtw(I2∩Vt)(I_2\cap V_t) 得到了 w(I2′)(I_2')>w(I2)(I_2)

​ 现在问题有了些许转化. 对于一个 S⊆XtS\subseteq X_t,我们试图去找到一个权值最大的拓展集 S^⊇S\hat{S} \supseteq S,且有 S^⊆Vt,S^∩Xt=S\hat{S} \subseteq V_t,\hat{S}\cap X_t=S,S^\hat{S} 还是独立集. 根据上一段讨论,我们可以知道solutionsolution II在 VtV_t 里的部分是可以安全替换成 S^\hat{S} 的.

this replacement preserves independence and can only increase the weight. Observe that the number of subproblems is small: for every node tt, we have only 2∣Xt∣2^{|X_t|} subproblems. Also, we do not need to remember S^\hat{S} explicitly; remembering its weight will suffice.

​ 对于每个节点 tt(这里原文是 nodenode,原文有提 nodenode 指的是树分解的树上节点)和每个 S⊆XtS\subseteq X_t,有如下定义:

c[t,S]=maximum  possible  weight  of  a  set  S^  such  thatc[t,S]=maximum\,\,possible\,\,weight\,\,of\,\,a\,\,set\,\,\hat{S}\,\,such\,\,that   S⊆S^⊆Vt,S^∩Xt=S,and  S^  is  independent\,\,S\subseteq\hat{S}\subseteq V_t,\hat{S}\cap X_t=S,and\,\,\hat{S}\,\,is\,\,independent

​ 如果没有这样的 S^\hat{S} 存在(即 SS 不是独立集),就说 c[t,S]=−∞c[t,S]=-\infty,c[r,∅]c[r,{\emptyset}] 就是整个图 GG 的最大独立集(因为 Vr=V(G)V_r=V(G) 且 Xr=∅X_r=\emptyset).

​ 下面就来计算 c[,]c[,]


​ 下面都是基于 nicenice 树分解的.

Leaf  node\bold{Leaf\,\,node}: c[t,∅]=0c[t,\emptyset]=0

Introduce  node\bold{Introduce\,\,node}: tt 是一个introdece node,其孩子节点为 t′t',Xt=Xt′∪{v}X_t=X_{t'}\cup\{v\},SS 是 XtX_t 的任意子集. 若 SS 不是独立集,有 c[t,S]=−∞c[t,S]=-\infty;否则,有以下公式:

c[t,S]={c[t′,S]if v∉Sc[t′,S∖{v}]+w(v)otherwise c[t,S]= \begin{cases} c[t',S]&\text{if } v\notin S \\ c[t',S\setminus \{v\}]+w(v)&\text{otherwise } \end{cases}

证明:

​ 先看 v∉Sv\notin S的情况,此时可以判断 the families of S^\hat{S} 在 c[t,S]c[t,S] 和 c[t′,S]c[t',S] 上是一样的(因为有 S^∩Xt=S\hat{S}\cap X_t=S 限制,取不到 vv ),显然就有 c[t,S]=c[t′,S]c[t,S]=c[t',S];

​ 对于 v∈Sv\in S 的情况,从两个角度去看:假设 S^\hat{S} 是基于 c[t,S]c[t,S] 最大权值定义上的一个集合,那么就有 S^∖{v}\hat{S}\setminus\{v\} 是基于 c[t′,S∖{v}]c[t',S\setminus\{v\}] 上的一个集合,且有 c[t′,S∖{v}]≥w(S^∖{v})=w(S^)−w(v)=c[t,S]−w(v)c[t',S\setminus\{v\}]\ge w(\hat{S}\setminus\{v\})=w(\hat{S})-w(v)=c[t,S]-w(v),最后得到:

c[t,S]≤c[t′,S∖{v}]+w(v)c[t,S]\le c[t',S\setminus\{v\}]+w(v)

​ 从另一个角度,设 S′^\hat{S'} 是基于 c[t′,S∖{v}]c[t',S\setminus \{v\}] 最大权值定义的一个集合. 因为 SS 是独立的,vv 不会有邻居在 S∖{v}=S′^∩Xt′S\setminus\{v\}=\hat{S'}\cap X_{t'} 里,再依据 Lemma 7.3 可以得到 vv 没有邻居在 Vt′∖Xt′V_{t'}\setminus X_{t'}(如果有邻居,那么 vv 作为边界的一部分是属于 Xt∩Xt′=Xt′X_t\cap X_{t'}=X_{t'},但是 Xt′X_{t'} 不含 vv),Vt′∖Xt′V_{t'}\setminus X_{t'} 是 S′^∖Xt′\hat{S'}\setminus X_{t'} 的超集. 所以 vv 没有邻居在 S′^∖Xt′\hat{S'}\setminus X_{t'} 和 S′^∩Xt′\hat{S'}\cap X_{t'} 里,即 vv 没有邻居在 S′^\hat{S'} 里, S′^∪{v}\hat{S'}\cup\{v\} 是一个独立集. 由 (S′^∪{v})∩Xt=S(\hat{S'}\cup\{v\})\cap X_t=S,有:

c[t,S]≥w(S′^∪{v})=w(S′^)+w(v)=c[t′,S∖{v}]+w(v)c[t,S]\ge w(\hat{S'}\cup\{v\})=w(\hat{S'})+w(v)=c[t',S\setminus\{v\}]+w(v)

​ 由≤\le和≥\ge就得出 c[t,S]=c[t′,S∖{v}]+w(v)c[t,S]=c[t',S\setminus\{v\}]+w(v).

​ 多对照 c[t,S]c[t,S] 的定义和 Lemma 7.3 来看要容易一点.

Forget  node\bold{Forget\,\,node}: tt 是一个forget node,其孩子节点为 t′t',Xt=Xt′∖{v}X_t=X_{t'}\setminus\{v\}. SS 是 XtX_t 的任意子集. 若 SS 不是独立集,有 c[t,S]=−∞c[t,S]=-\infty;否则有:

c[t,S]=max{c[t′,S],c[t′,S∪{v}]}c[t,S]=max\{c[t',S],c[t',S\cup\{v\}]\}

证明:

​ 设 S^\hat{S} 是基于 c[t,S]c[t,S] 最大权值定义上的一个集合. 若 v∉S^v\notin \hat{S},那么 S^\hat{S} 就属于 c[t′,S]c[t',S] 所要考虑的集合中的一个(可从 c[t,S]c[t,S] 的定义分析),于是就有 c[t′,S]≥w(S^)=c[t,S]c[t',S]\ge w(\hat{S})=c[t,S];若 v∈S^v\in \hat{S},那么 S^\hat{S} 就属于 c[t′,S∪{v}]c[t',S\cup\{v\}] 所要考虑的集合中的一个,于是就有 c[t′,S∪{v}]≥w(S^)=c[t,S]c[t',S\cup\{v\}]\ge w(\hat{S})=c[t,S]. 最后得到:

c[t,S]≤max{c[t′,S],c[t′,S∪{v}]}c[t,S]\le max\{c[t',S],c[t',S\cup\{v\}]\}

​ 注意到在基于 c[t′,S]c[t',S] 的定义下所要考虑到的集合 S^\hat{S},同样也会在基于 c[t,S]c[t,S] 和 c[t′,S∪{v}]c[t',S\cup\{v\}] 的定义下被考虑,于是就有 c[t,S]≥c[t′,S]c[t,S]\ge c[t',S] 和 c[t,S]≥c[t′.S∪{v}]c[t,S]\ge c[t'.S\cup\{v\}]. 最后我们有:

c[t,S]≥max{c[t′,S],c[t′,S∪{v}]}c[t,S]\ge max\{c[t',S],c[t',S\cup\{v\}]\}

​ 由≤\le和≥\ge就得出 c[t,S]=max{c[t′,S],c[t′,S∪{v}]}c[t,S]=max\{c[t',S],c[t',S\cup\{v\}]\}.

Join  node\bold{Join\,\,node}: tt 是一个 join node,其两个孩子 t1,t2t_1,t_2 满足 Xt=Xt1=Xt2X_t=X_{t_1}=X_{t_2},SS 为 XtX_t 的任意子集;和往常一样考虑 SS 是一个独立集,我们有:

c[t,S]=c[t1,S]+c[t2,S]−w(S)c[t,S]=c[t_1,S]+c[t_2,S]-w(S)

证明:

​ 设 S^\hat{S} 是基于 c[t,S]c[t,S] 最大权值定义上的一个集合. 令 S1^=S^∩Vt1\hat{S_1}=\hat{S}\cap V_{t_1},S2^=S^∩Vt2\hat{S_2}=\hat{S}\cap V_{t_2}. 我们可以看到 S1^\hat{S_1} 是独立的且 S1^∩Xt1=S\hat{S_1}\cap X_{t_1}=S,因此 S^\hat{S} 也是基于 c[t1,S]c[t_1,S] 定义下被考虑的集合,于是就有 c[t1,S]≥w(S1^)c[t_1,S]\ge w(\hat{S_1}),同样也能得到 c[t2,S]≥w(S2^)c[t_2,S]\ge w(\hat{S_2}). 由于 S1^∩S2^=S\hat{S_1}\cap \hat{S_2}=S,最后可以得到:

c[t,S]=w(S^)=w(S1^)+w(S2^)−w(S)≤c[t1,S]+c[t2,S]−w(S)c[t,S]=w(\hat{S})=w(\hat{S_1})+w(\hat{S_2})-w(S)\le c[t_1,S]+c[t_2,S]-w(S)

​ 另一方面,设 S1′^\hat{S'_1} 是基于 c[t1,S]c[t_1,S] 的最大权值定义上的一个集合,S2′^\hat{S'_2} 也是类似. 通过Lemma 7.3可以得到在 Vt1∖XtV_{t_1}\setminus X_t 和 Vt2∖XtV_{t_2}\setminus X_t 里的节点之间没有边相连(separatorseparator 就是 XtX_t 自己),这表明 S′^:=S1′^∪S2′^\hat{S'}:=\hat{S'_1}\cup\hat{S'_2} 是独立的( S1′^\hat{S'_1} 和 S2′^\hat{S'_2} 是独立的,Vt1∖XtV_{t_1}\setminus X_t 和 Vt2∖XtV_{t_2}\setminus X_t 里的节点之间没有边相连,S1′^⊆Vt1\hat{S'_1}\subseteq V_{t_1},S2′^⊆Vt2\hat{S'_2}\subseteq V_{t_2},那显然两个并起来也是独立了). 另外我们还有 S′^∩Xt=S\hat{S'}\cap X_t=S,也就是说 S′^\hat{S'} 是基于 c[t,S]c[t,S] 所要考虑的集合之一,最后就有:

c[t,S]≥w(S′^)=w(S1′^)+w(S2′^)−w(S)=c[t1,S]+c[t2,S]−w(S)c[t,S]\ge w(\hat{S'})=w(\hat{S'_1})+w(\hat{S'_2})-w(S)=c[t_1,S]+c[t_2,S]-w(S)

​ 由≤\le和≥\ge就得出 c[t,S]=c[t1,S]+c[t2,S]−w(S)c[t,S]=c[t_1,S]+c[t_2,S]-w(S).


现在稍做总结,算算时间

Recall that we are working on a tree decomposition of width at most kk, which means that \vertXt∣\vertX_t\vert ≤k+1\le k + 1 for every node tt. Thus at node tt we compute 2∣Xt∣≤2k+12^{|X_t|} \le 2^{k+1} values of c[t,S]c[t, S].

Wrapping up, for every node tt it takes time 2k2^k· kO(1)k^{O(1)} to compute all the values c[t,S]c[t, S]. Since we can assume that the number of nodes of the given tree decompositions is O(kn)O(kn) (see Lemma 7.4), the total running time of the algorithm is 2k2^k·kO(1)k^{O(1)}·nn.

Theorem 7.5 给定一个有 nn 个节点的带权图 GG,同时给定它的宽度至多为 kk 的树分解,那么 Weighted  Independent  Set\bold{Weighted\,\,Independent\,\,Set}问题可以在 2k2^k·kO(1)k^{O(1)}·nn 时间内完成.

Corollary 7.6 给定一个有 nn 个节点的带权图 GG,同时给定它的宽度至多为 kk 的树分解,那么 Vertex  Cover\bold{Vertex\,\,Cover}问题可以在 2k2^k·kO(1)k^{O(1)}·nn 时间内完成.

​ 这些算法的时间复杂度上界会在第1414章说明是被固定限制了的.

7.3.2 Dominating Set

本节我们试图去找图 GG 的最小支配集.

​ 首先对树分解进行些许变化,引入新节点 introduce  edge  nodeintroduce\,\,edge\,\,node,之前的 introduce  nodeintroduce\,\,node 现在叫 introduce  vertex  nodeintroduce\,\,vertex\,\,node.

Introduce  edge  node\bold{Introduce\,\,edge\,\,node}: a node tt, labeled with an edge uvuv ∈ E(G)E(G) such that u,vu, v ∈ XtX_t, and with exactly one child t′t' such that Xt=Xt′X_t = X_{t'}. We say that edge uvuv is introduced at tt.

​ 在整个树分解里,我们要求 E(G)E(G) 里的每一条边都恰好被引进(introducedintroduced)一次. 给定一个 nicenice 树分解,可通过下面方法去转化成我们需要的. 由 T(3)T(3) 可以得到,对于一个 nicenice 树分解,其中的每一个节点 vv 都存在唯一一个 highest  nodehighest\,\,node ,记作 t(v)t(v),使得 v∈Xt(v)v\in X_{t(v)};另外有 Xt(v)X_{t(v)} 的父节点是一个 forgetforget 了 vv 的 forget  nodeforget\,\,node. 对于 E(G)E(G) 中的每一个边 uvuv ,根据 T(2)T(2) 可以得到,要么 t(u)t(u) 是 t(v)t(v) 的祖先,要么反过来. 所以我们可以在 t(u)t(u) 和其父节点之间插入一个 introduce  uvintroduce\,\,uv 的节点.

Moreover, the obtained tree decomposition still has O(kn)O(kn) nodes, since a graph of treewidth at most kk has at most knkn edges


​ 对树分解里的每个节点 tt 都定义子图 GtG_t:

Gt=(Vt,Et={e:e  is  introduced  in  the  subtree  rooted  at  t})G_t=(V_t,E_t=\{e:e\,\,\text{is}\,\,\text{introduced}\,\,\text{in}\,\,\text{the}\,\, \text{subtree}\,\,\text{rooted}\,\,\text{at}\,\,t\})

​ 对树分解的节点染色 f:Xt→{0,0^,1}f:X_t\to \{0,\hat{0},1\},详细见下:

  • Black\bold{Black}: 代表 11,所有的黑色节点都必须被包含在 GtG_t 的部分解里.
  • White\bold{White}: 代表 00,所有的白色节点都不被包含在部分解里,且必须是被其支配的.
  • Grey\bold{Grey}: 代表 0^\hat{0},所有的灰色节点都不被包含在部分解里,但不必被其支配.

需要强调的是,我们不会禁止灰色节点被支配,只是不关心它们会不会被支配.


​ tt 和 ff 的最小兼容集(minimum  compatible  setminimum\,\,compatible\,\,set)D⊆VtD\subseteq V_t,满足:

  • D∩Xt=f−1(1)D\cap X_t=f^{-1}(1),f−1(1)f^{-1}(1) 即 XtX_t中的黑色点集合.
  • Vt∖f−1(0^)V_t\setminus f^{-1}(\hat{0}) 中的每一个节点要么在 DD 里,要么是在 GtG_t 里与 DD 中的一点相邻. 即 DD 支配 VtV_t 在 GtG_t 中的所有点,除了可能的 XtX_t 里的灰色点.

​ 对于 XtX_t 的每一个染色方案 ff,我们用 c[t,f]c[t,f] 来表示 DD 的大小. 如果对于 tt 和 ff 没有最小兼容集存在,就让 c[t,f]=+∞c[t,f]=+\infty. 注意,GG 的最小支配集大小就是 c[r,∅]c[r,\emptyset].

​ 对于子集 X⊆V(G)X\subseteq V(G),考虑一个染色方案 f:Xt→{0,0^,1}f:X_t\to \{0,\hat{0},1\}. 对于节点 v∈V(G)v\in V(G) 和一个染色 α∈{0,0^,1}\alpha\in\{0,\hat{0},1\},我们按照下面去定义一个新的染色方案 fv→α:X∪{v}→{0,0^,1}f_{v\to\alpha}:X\cup\{v\}\to\{0,\hat{0},1\}:

fv→α(x)={f(x)when x≠v,αwhen x=v.f_{v\to\alpha}(x)= \begin{cases} f(x)&\text{when }x\neq v,\\ \alpha&\text{when }x=v. \end{cases}

(就是把染色方案 ff 里的 vv 的颜色换成 α\alpha)

对于 XX 的一个染色方案 ff,Y⊆XY\subseteq X,用 f∣Yf\vert_Y 来表示 ff 对 YY 的限制.

(就是 ff 对 YY 染色的部分)


​ 下面来计算 cc 的值:

Leaf  node\bold{Leaf\,\,node}: 对于一个 leaf  nodeleaf\,\,node tt,Xt=∅X_t=\emptyset,因此 c[t,∅]=0c[t,\emptyset]=0

Introduce  vertex  node\bold{Introduce\,\,vertex\,\,node}: tt 是一个 introduce  nodeintroduce\,\,node,其孩子节点为 t′t',Xt=Xt′∪{v}X_t=X_{t'}\cup\{v\} 且 v∉Xt′v\notin X_{t'}.

c[t,f]={+∞when  f(v)=0,c[t′,f∣Xt′]when  f(v)=0^,1+c[t′,f∣Xt′]when  f(v)=1.c[t,f]= \begin{cases} +\infty&\text{when}\,\,f(v)=0,\\ c[t',f\vert_{X_{t'}}]&\text{when}\,\,f(v)=\hat{0},\\ 1+c[t',f\vert_{X_{t'}}]&\text{when}\,\,f(v)=1. \end{cases}

​ 解释一下 f(v)=0f(v)=0 的情况,由于该点是 introduce  nodeintroduce\,\,node,还没有没有引进边 uvuv 到图 GtG_t 里,因此此时的 vv 在图 GtG_t 里是孤立的,又由于 f(v)f(v) 是白色,你没法让 DD 同时满足兼容集的两个要求. 所以值为 +∞+\infty.

Introduce  edge  node\bold{Introduce\,\,edge\,\,node}: tt 是一个 introduce edge node,标签为 uvuv,其孩子节点为 t′t'. ff 为 XtX_t 的一种染色方案,DD 是 ff 和 tt 的最小

c[t,f]={c[t′,fv→0^]when  (f(u),f(v))=(1,0),c[t′,fu→0^]when  (f(u),f(v))=(0,1),c[t′,f]otherwise.c[t,f]= \begin{cases} c[t',f_{v\to\hat{0}}]&\text{when}\,\,(f(u),f(v))=(1,0),\\ c[t',f_{u\to\hat{0}}]&\text{when}\,\,(f(u),f(v))=(0,1),\\ c[t',f]&\text{otherwise}. \end{cases}

​ 按着上面对 introduce  vertex  nodeintroduce\,\,vertex\,\,node 的一点解释就容易理解一点

Forget  node\bold{Forget\,\,node}: tt 是一个 forget  nodeforget\,\,node,其孩子为 t′t',Xt=Xt′∖{v}X_t=X_{t'}\setminus\{v\} 且 v∈Xt′v\in X_{t'}.

c[t,f]=min{c[t′,fv→1],c[t′,fv→0]}c[t,f]=min\{c[t',f_{v\to 1}],c[t',f_{v\to 0}]\}

Join  node\bold{Join\,\,node}: tt 是一个 join  nodejoin\,\,node,其孩子节点 t1t_1 和 t2t_2,Xt=Xt1=Xt2X_t=X_{t_1}=X_{t_2},染色方案 f1f_1 是 Xt1X_{t_1} 的,f2f_2 同理. 我们说 f1f_1 和 f2f_2 是对 ff 一致的(consistentconsistent),如果 XtX_t 里的每一个节点都满足下面条件:

  1. f(v)=1f(v)=1 if and only if f1(v)=f2(v)=1f_1(v)=f_2(v)=1,
  2. f(v)=0f(v)=0 if and only if (f1(v),f2(v))∈{(0^,0),(0,0^)}(f_1(v),f_2(v))\in\{(\hat{0},0),(0,\hat{0})\},
  3. f(v)=0^f(v)=\hat{0} if and only if f1(v)=f2(v)=0^f_1(v)=f_2(v)=\hat{0}.
c[t,f]=minf1,f2{c[t1,f1]+c[t2,f2]−∣f−1(1)∣}c[t,f]=min_{f_1,f_2}\{c[t_1,f_1]+c[t_2,f_2]-|f^{-1}(1)|\}

​ 上面的 min 是取所有对 ff 一致的 f1,f2f_1,f_2.

​ 一方面,如果 DD 是对 ff 和 tt 的兼容集,且有 f1,f2f_1,f_2 对 ff 一致,那么 D1:=D∩Vt1D_1:=D\cap V_{t_1} 就是对 f1f_1 和 t1t_1 的兼容集,D2:=D∩Vt2D_2:=D\cap V_{t_2} 一样. 即,对 ff 染色里所有点 tt 我们让它要么在 f1f_1 里是白色的要么在 f2f_2 里白色的,取决于 vv 是否在 Gt1G_{t_1} 里被 D1D_1 支配或是在 Gt2G_{t_2} 里被 D2D_2 支配(如果被两方面支配,那任意一个选择都是合理的). 另一方面, 如果 D1D_1 是对 f1f_1 和 t1t_1 的兼容集,D2D_2 同理,f1,f2f_1,f_2 对 ff 一致,那么就有 D:=D1∪D2D:=D_1\cup D_2 是对 ff 和 tt 的兼容集.

对于这样的 D1D_1 和 D2D_2,我们有 D∩Xt=D1∩Xt1=D2∩Xt2=f−1(1)D\cap X_t=D_1\cap X_{t_1}=D_2\cap X_{t_2}=f^{-1}(1),于是有 |DD| = |D1D_1| + |D2D_2| - |f−1(1)f^{-1}(1)|.


下面算算时间:

对每一个的 leaf node, introduce vertex/edge node 和 forget node 是 3k3^k· kO(1)k^{O(1)},计算每一个 join node 是 4k4^k· kO(1)k^{O(1)},由于我们假设一个 nicenice 树分解的节点个数是 O(kn)O(kn),我们有下面结论:

Theorem 7.7 给定一个 nn 个节点的图 GG 和它的宽度至多为 kk 的树分解,Dominating  Set\bold{Dominating\,\,Set} 问题可以在 4k4^k· kO(1)k^{O(1)}· nn 内完成.

在第1111章会介绍把 join node 计算时间从 4k4^k 降到 3k3^k.

7.3.3 Steiner Tree

​ 这里了解Steiner Tree. 我们也会对图 GG 做一个宽度至多为 kk 的 nicenice 树分解,该树分解的定义方式和 7.3.2 里的一样,即带有 introduce  edge  nodesintroduce\,\,edge\,\,nodes.

Single-exponential algorithm for Steiner Tree requires more advanced techniques that will be discussed in Chapter 11.

​ 为了让接下来的算法更易解释,我们随机选择一个关键点 u∗∈Ku^{*}\in K,并将 u∗u^* 添加到在 T\mathcal T 里的每一个包里. 这样处理后 T\mathcal T 的宽度将加一,根节点和叶子节点都是 {u∗}\{u^{*}\}.

​ 做一些规定:HH 是连接了 KK 的斯坦纳树,tt 是 T\mathcal T 的节点. HH 在 GtG_t 里的部分是一个有些许连通分量的森林 FF. 由于 HH 是连通的且 XtX_t 至少包含一个关键点,就会有 FF 里的每一个连通分量都和 XtX_t 有交集的. 另外,K∩VtK\cap V_t 里的每一个关键点都应该属于 FF 里的某些连通分量. 对于 XtX_t 的每一个子集 XX 和 XX 的每一个划分 P\mathcal P,GtG_t 里 FF 的最小大小有:

  1. K∩Vt⊆V(F)K\cap V_t\subseteq V(F),即 FF 穿过 VtV_t 里的所有关键点,
  2. V(F)∩Xt=XV(F)\cap X_t=X,
  3. XtX_t 与 FF 里连通分量节点集合的交集正好形成了 XX 的划分 P\mathcal P.

steinerTree1


​ 当我们引入新节点或是在 join node 时,部分解的连通分量可能会合并,因此我们需要将更新的分区跟踪到连通分量里.

​ 规定:对于一个包 XtX_t,集合 X⊆XtX\subseteq X_t(就上面那个 Steiner tree导出来的),XX 的一个划分 P={P1,P2,...,Pq}\mathcal P=\{P_1,P_2,...,P_q\},c[t,X,P]c[t,X,\mathcal P] 的值就是 GtG_t 里 FF 的最少边数,且:

  • FF 有恰好 qq 个连通分量,分别为 C1,...,CqC_1,...,C_q,因此对于每一个 s∈{1,...,q}s\in\{1,...,q\},有 Ps=V(Cs)∩XtP_s=V(C_s)\cap X_t,于是就有 P\mathcal P 和 FF 的连通分量是对应的.
  • Xt∩V(F)=XX_t\cap V(F)=X. 因此 Xt∖XX_t\setminus X 与 FF 不相连.
  • K∩VtK\cap V_t 的每一个关键点都在 V(F)V(F) 里.

​ 如果 FF 符合上面,就说 FF 是对 (t,X,P)(t,X,\mathcal P) 兼容的(compatiblecompatible),如果没有兼容的 FF 存在,就让 c[t,X,P]=+∞c[t,X,\mathcal P]=+\infty

​ 最优解的 Steiner tree 即为 c[r,{u∗},{{u∗}}]c[r,\{u^*\},\{\{u^*\}\}],下面来计算 cc.


Leaf  node\bold{Leaf\,\, node}: tt 是 leaf node,那么 Xt={u∗}X_t=\{u^*\}. 由于 u∗∈Ku^*\in K,我们有 c[t,∅,∅]=+∞c[t,\emptyset,\emptyset]=+\infty,c[t,{u∗},{{u∗}}]=0c[t,\{u^*\},\{\{u^*\}\}]=0

Introduce  vertex  node\bold{Introduce\,\,vertex\,\,node}: tt 是 introduce vertex node,其孩子 t′t' 有 Xt=Xt′∪{v}X_t=X_{t'}\cup\{v\},v∉Xt′v\notin X_{t'}. 由于我们还没有引入任何与 vv 相邻的边(考虑 introduce edge node),此时的 vv 在 GtG_t 里是孤立的. 所以,对每一个集合 X⊆XtX\subseteq X_t 和 XX 的划分 P={P1,P2,...,Pq}\mathcal{P}=\{P_1,P_2,...,P_q\},我们做以下操作:如果 vv 是一个关键点,那么它必然是属于 XX 的;如果 vv 是属于 XX 的,那有 {v}\{v\} 就是 P\mathcal P 的一个连通分量. 如果上面的情况不能满足,那么我们让 c[t,X,P]=+∞c[t,X,\mathcal P]=+\infty. 否则:

c[t,X,P]={c[t′,X∖{v},P∖{{v}}]it  v∈X,c[t′,X,P]otherwise.c[t,X,\mathcal P]= \begin{cases} c[t',X\setminus\{v\},\mathcal{P}\setminus\{\{v\}\}]&\text{it}\,\,v\in X,\\ c[t',X,\mathcal P]&\text{otherwise}. \end{cases}

Introduce  edge  node\bold{Introduce\,\,edge\,\,node}: tt 是一个引入了边 uvuv 的 introduce edge node,其孩子为 t′t'. 对任意的集合 X⊆XtX\subseteq X_t 和 XX 的划分 P={P1,P2,...,Pq}\mathcal P=\{P_1,P_2,...,P_q\},我们考虑以下三种情况:如果 u∉Xu\notin X 或者 v∉Xv\notin X,那么我们就不能把 uvuv 包含进正在构建的树里(因为边的一个端点不与树相连),此时 c[t,X,P]=c[t′,X,P]c[t,X,\mathcal P]=c[t',X,\mathcal P];同样的,如果 uu 和 vv 都在 XX 里,但不在 P\mathcal P 的同一块里,结果是一样的; 如果 uu 和 vv 都在 XX 里且都在 P\mathcal P 的同一个块里,此时可以选择是否添加边 uvuv. 如果选择不添加 uvuv,那么就直接 c[t,X,P]=c[t′,X,P]c[t,X,\mathcal P]=c[t',X,\mathcal P];如果选择添加 uvuv,那么划分 P\mathcal{P} 里包含了 uu 和 vv 那个块就一定是通过合并两个小一点的块得到的(一个包含了 uu 一个包含了 vv). 于是有:

c[t,X,P]=min{minP′c[t′,X,P′]+1,c[t′,X,P]}c[t,X,\mathcal P]=min\{min_{\mathcal{P'}}c[t',X,\mathcal{P'}]+1,c[t',X,\mathcal{P}]\}

其中大括号里面那个 min,是我们考虑 XX 的所有 uu 和 vv 不在同一个块里的划分 P′\mathcal{P'}(否则添加 uvuv 将会出现环).

Forget  node\bold{Forget\,\,node}: tt 是一个 forget node,其孩子 t′t' 有 Xt=Xt′∖{v}X_t=X_{t'}\setminus\{v\},v∈Xt′v\in X_{t'}. 此时要分 vv 是否在 XX 和 P\mathcal P 对应的解决方案里. 如果在,那么 vv 就该添加到 P\mathcal P 已有的块里;如果不在,那就取 t′t' 里一样的 XX 和 P\mathcal P. 具体见下面式子:

c[t,X,P]=min{minP′c[t′,X∪{v},P′],c[t′,X,P]}c[t,X,\mathcal{P}]=min\{min_{\mathcal{P'}}c[t',X\cup\{v\},\mathcal{P'}],c[t',X,\mathcal{P}]\}

其中大括号里面那个 min,是我们对所有 X∪{v}X\cup\{v\} 的划分 P′\mathcal{P'} 所取的,注意这个 P′\mathcal{P'} 是通过把 vv 添加到 P\mathcal P 里的一个块而得到的.

Join  node\bold{Join\,\,node}: tt 是一个 join node,其孩子味 t1t_1 和 t2t_2,Xt=Xt1=Xt2X_t=X_{t_1}=X_{t_2}. 处理这种点其实就是去合并 Gt1G_{t_1} 和 Gt2G_{t_2} 所对应的部分解决方案,注意可能会出现环.

steinerTree2

​ 为了避免合并时出现环,我们将介绍一种结构:对于 XX 的一个划分 P\mathcal P,令 GPG_{\mathcal P} 为一个森林,其中的连通分量恰好与 P\mathcal P 对应(即 P\mathcal{P} 里的每一块都有 GPG_{\mathcal{P}} 里的一个树和其有相同的点集). 如果 GP1G_{\mathcal {P_1}} 和 GP2G_{\mathcal{P_2}} 这两个森林合并后得到的森林里的连通分量恰好就是 P\mathcal P ,那么我们说 P\mathcal P 是对 P1\mathcal{P_1} 和 P2\mathcal{P_2} 的一个无环合并(acylic  mergeacylic\,\,merge). 于是有:

c[t,X,P]=minP1,P2c[t1,X,P1]+c[t2,X,P2]c[t,X,\mathcal P]=min_{\mathcal{P_1},\mathcal{P_2}}c[t_1,X,\mathcal{P_1}]+c[t_2,X,\mathcal{P_2}]

这里的 min 是对所有能满足 P\mathcal P 是无环合并的的 P1\mathcal{P_1}, P2\mathcal{P_2} 对所取的.

下面来估计运算时间.


​ 首先回忆一下,我们这里树分解里的每一个包最大大小为 k+2k+2(宽度为 k+1k+1 了),于是每一个节点的cc 情况会至多有 2k+22^{k+2} · (k+2)k+2=kO(k)(k+2)^{k+2}=k^{O(k)}(节点 tt 最多 2∣Xt∣2^{|X_t|} 个子集 X⊆XtX\subseteq X_t,而 XX 最多 |XX|∣X∣^{|X|} 个划分). 计算一个 cc 需要最多考虑其他节点对的所有状态,需要时间 (kO(k))2=kO(k)(k^{O(k)})^2=k^{O(k)}.

Theorem 7.8. 给定 nn 个节点的图 GG,K⊆V(G)K\subseteq V(G) 为给定的关键点集合,同时又给定宽度最多为 kk 的树分解. 那么计算连接 KK 的 Steiner  treeSteiner\,\,tree 的最小边数需要 kO(k)k^{O(k)} · nn.

Algorithms similar to the dynamic programming of Theorem 7.8 can be used to solve many problems in time kO(k)k^{O(k)} · nO(1)n^{O(1)}. Essentially, such a running time appears for problems with connectivity requirements, since then it is natural to keep in the dynamic programming state a partition of a subset of the bag. Since the number of such partitions is at most kO(k)k^{O(k)}, this factor appears naturally in the running time.

steinerTree3

The main challenge for most of the problems is to understand what information to store at nodes of the tree decomposition. Obtaining formulas for forget, introduce and join nodes can be a tedious task, but is usually straightforward once a precise definition of a state is established.

End of record / 043
← All records
READ NEXTLittle Vampire