有向无环图的最小路径点覆盖
问题
给定一张有向无环图 , , , 要求用尽量少的不相交的简单路径 ( ( ( 不是有向边 ) ) ) , , , 覆盖有向无环图的所有顶点 ( ( ( 也就是每个顶点恰好被覆盖一次 ) . ). ). 这个问题被称为有向无环图的最小路径点覆盖 . . .
解法
1. 1. 1. 拆点二分图定义
设原来的有向无环图为 G = ( V , E ) , n = ∣ V ∣ . G=(V,E),n=|V|. G=(V,E),n=∣V∣. 把 G G G 中的每一个 x x x 拆成编号为 x x x 和 x + n x+n x+n 的两个点 . . . 建立一个新的二分图 , , , 1 ∼ n 1\sim n 1∼n 作为二分图左部点 , , , n + 1 ∼ 2 n n+1\sim 2n n+1∼2n 作为二分图的右部点 , , , 对于原图的每条有向边 ( x , y ) , (x,y), (x,y), 在二分图的左部点 x x x 与右部点 y + n y+n y+n 之间连边 . . . 最终得到的二分图称为 G G G 的拆点二分图 , , , 记为 G 2 . G_2. G2.
2. 2. 2. 定理 1 1 1
有向无环图 G G G 的最小路径点覆盖包含的路径条数 , , , 等于 n n n 减去拆点二分图 G 2 G_2 G2 的最大匹配数 . . .
证明
:
:
:
在有向无环图
G
=
(
V
,
E
)
G=(V,E)
G=(V,E) 的最小路径点覆盖中
,
,
, 因为路径不相交
,
,
, 所以
∀
x
∈
V
\forall x\in V
∀x∈V 的入读和出度都不超过
1.
1.
1. 又因为每个节点都被覆盖
,
,
, 所以
x
x
x 的入读和出度至少有一个是
1.
1.
1.
因此 , , , 最小路径点覆盖中的所有边 , , , 在拆点二分图 G 2 G_2 G2 中构成一组匹配 . . . 最小路径点覆盖中每条边 ( x , y ) (x,y) (x,y) 的起点 x x x 与二分图中每条匹配边 ( x , y + n ) (x,y+n) (x,y+n) 的左部点是一一对应的 . . .
对于每条路径的终点 t t t , , , 因为 t t t 没有在 D a g Dag Dag 中的出边 , , , 所以 t t t 必然失配 . . .
路径点覆盖包含路径条数最少 ⇔ \Leftrightarrow ⇔ 路径的终点数最少 ⇔ \Leftrightarrow ⇔ 二分图左部非匹配点最少
故 G G G 的最小路径点覆盖的路径数等于 n n n 减去拆点二分图 G 2 G_2 G2 的最大匹配数 . . .
3. 3. 3. 拓展问题
给定一张有向无环图 , , , 要求用尽量少的可相交的简单路径 , , , 覆盖有向无环图的所有顶点 ( ( ( 也就是每个顶点可以覆盖多次 ) . ). ). 这个问题被称为有向无环图的最小路径可重点覆盖 . . .
在最小路径可重点覆盖中 , , , 若两条路径 ( ⋯ → u → p → v → ⋯ ) (\cdots\rightarrow u \rightarrow p \rightarrow v \rightarrow\cdots) (⋯→u→p→v→⋯) 和 ( ⋯ → x → p → y → ⋯ ) (\cdots\rightarrow x \rightarrow p \rightarrow y \rightarrow\cdots) (⋯→x→p→y→⋯) 在点 p p p 相交 , , , 则我们在原图中增加一条边 ( x , y ) , (x,y), (x,y), 让第二条路径通过这条有向边 , , , 就可以避免重复覆盖点 p . p. p.
进一步的 , , , 如果我们把原图中所有间接连通的点对 x , y x,y x,y 直接连上有向边 ( x , y ) , (x,y), (x,y), 那么任何 " " " 有路径相交的点覆盖 " " " 一定能转化成 " " " 没有路径相交的点覆盖 " . ". ".
综上所述 , , , 有向无环图 G G G 的最小路径可重复点覆盖 , , , 等价于先对有向图传递闭包 , , , 得到有向无环图 G ′ , G', G′, 再在 G ′ G' G′ 上求一般的 ( ( ( 路径不可相交 ) ) ) 最小路径点覆盖 . . .
4. 4. 4. 独立集问题
D i l w o r t h Dilworth Dilworth 定理 , , , 能证明最大独立集等于最小路径可重点覆盖
设偏序集 S S S . . . S S S 能划分成的最少的全序集 ( ( ( 全序集即可比的边成链 , , , 最少的全序集即最小路径可重点覆盖 ) ) ) 的个数为 K , S K,S K,S 的最大反链 ( ( ( 反链即不可比的边成链 ) ) ) 的元素个数 ( ( ( 即最大独立集 ) ) ) 为 M . M. M.
-
先证明 K ≥ M . K\ge M. K≥M. 设反链 A = { a 1 , a 2 , ⋯ , a M } , A=\{a_1,a_2,\cdots,a_M\}, A={a1,a2,⋯,aM}, 假设 K < M , K<M, K<M, 那么由抽屉原理 , , , 必然有两个元素 a i , a j a_i,a_j ai,aj 在同一个全序集中 . . . 那么 a i , a j a_i,a_j ai,aj 可比 . . . 与 a i , a j a_i,a_j ai,aj 不可比矛盾 . . .
-
再证明 K = M K=M K=M 用第二数学归纳法 . . .
设偏序集 S S S 中有 m m m 个元素 . . .
- 当 m = 0 m=0 m=0 和 m = 1 m=1 m=1 时 , , , 对于命题结论显然成立 . . .
- 假设 m < n ( n ∈ N + ) m<n(n\in\N^+) m<n(n∈N+) 时命题成立 , , , 现在证 m = n m=n m=n 时 , , , 命题也成立 . . .
设 x x x 为 S S S 中的一个极大元 ( ( ( 极大元是偏序集中的一种特殊元素 , , , 指偏序集中没有比它更大的可比较的元素 ) . ). ). 考虑 S ′ = S − x S'=S-{x} S′=S−x 这个偏序集 . . . 由于 ∣ S ′ ∣ < n , |S'|<n, ∣S′∣<n, 由归纳假设 , S ′ ,S' ,S′ 满足命题 . . . 设 S ′ S' S′ 能划分成的最小的全序集个数为 k , k, k, 最大反链的元素个数也为 k . k. k. 那么我们设 S ′ S' S′ 被划分成了 k k k 个链分别为 C 1 , C 2 , ⋯ , C k C_1,C_2,\cdots,C_k C1,C2,⋯,Ck 设所有长度为 k k k 的反链分别为 A 1 , A 2 , ⋯ , A r ( A_1,A_2,\cdots,A_r( A1,A2,⋯,Ar( 假设有 r r r 条长度为 k k k 的反链 ) ) )
那么对于任意一个 A i A_i Ai 的元素必定在 k k k 条链上 , , , 每条链取一个元素 . . . 设为 a i 1 , a i 2 , ⋯ , a i k . a_{i1},a_{i2},\cdots,a_{ik}. ai1,ai2,⋯,aik.
那么我们考虑集合 B = { b 1 , b 2 , ⋯ , b k } = { max ( a i 1 ) , max ( a i 2 ) , ⋯ , max ( a i k ) } ( B=\{b_1,b_2,\cdots,b_k\}=\{\max(a_{i1}),\max(a_{i2}),\cdots, \max(a_{ik}) \}( B={b1,b2,⋯,bk}={max(ai1),max(ai2),⋯,max(aik)}( 从每条链中找到最大的在反链中的元素 ) . ). ). 这个集合一定也是一条反链 . ( .( .( 用反证法很容易证明 : : : 假设存在两个元素 b i , b j b_i,b_j bi,bj 可比 , , , 不妨设 b i ≤ b j , bi\le bj, bi≤bj, 其中 b i b_i bi 和 b j b_j bj 分别位于链 C i C_i Ci 和 C j C_j Cj 上 . . . 那么 b i b_i bi 所在链的每个 a i x a_{ix} aix 都与 b j b_j bj 可比 , , , 与 C i C_i Ci 上存在一个 a i x a_{ix} aix 与 b j b_j bj 不可比矛盾 ) ) ) ( ( ( 加粗的地方之所以是正确的 , , , 是因为 C i C_i Ci 与 C j C_j Cj 上肯定有两个元素属于同一条反链 ) ) )
现在考虑加入元素 x x x 的集合 S . S. S. 一个显然的事实是 , , , 加入一个极大元 , , , 不可能让划分的最少链个数更少 , , , 但是也不能让链的个数增加 2 2 2 及以上 ( ( ( 否则肯定不满足最少链 ) . ). ). 也不能让反链的最大长度更小 . . .
分两种情况 : : :
-
如果 x x x 这个极大元与 B B B 中每个元素都不可比。那么考虑 B ∪ { x } , B\cup\{x\}, B∪{x}, 就是一个长度为 k + 1 k+1 k+1 的反链。那么最少能划分的链的个数至少是 k + 1. k+1. k+1. 而加入一个元素 , , , 链的条数至多增加 1. 1. 1. 因此 , , , 链的最少条数就是 k + 1. k+1. k+1. 这样,对于这种情况 , , , 命题对于 m = n m=n m=n 时也成立了 . . .
-
如果 x x x 与 B B B 中的某个元素可比 , , , 假设 x x x 与 b i b_i bi 可比 , , , 那么显然 x ≥ b i : x\ge b_i: x≥bi:
考虑集合 D = { a 1 i , a 2 i , ⋯ , a r i } ∪ { x } . D=\{a_{1i},a_{2i},\cdots,a_{ri}\}\cup\{x\}. D={a1i,a2i,⋯,ari}∪{x}. D D D 显然也是一条链 . . . 现在考虑 S ′ ′ = S − D S''=S-D S′′=S−D 这个集合 . . . 由于每个长度为 k k k 的反链都被我们抽掉了一个元素 , , , 所以集合 S ′ ′ S'' S′′ 不会有长度为 k k k 的反链了 , , , 而长度为 k − 1 k-1 k−1 的反链显然是存在的 ( ( ( 按照原来的构造 ) . ). ). 由归纳假设 , S ′ ′ ,S'' ,S′′ 最少能划分成的链也是 k − 1. k-1. k−1. 不妨设划分为了 C 1 ′ , C 2 ′ , . . . , C k − 1 ′ . C'_1,C'_2,...,C'_{k-1}. C1′,C2′,...,Ck−1′.
那么,我们对 S S S 就构造出了 k k k 条链的情况 : C 1 ′ , C 2 ′ , ⋯ , C k − 1 ′ , D . :C'_1,C'_2,\cdots,C'_{k-1},D. :C1′,C2′,⋯,Ck−1′,D.
所以反链的长度最大为 k k k 了 . . . 而去掉 x x x 就已经可以构造出长度为 k k k 的反链 , , , 因此 S S S 的最大反链至少是 k . k. k. 因此最大反链就是 k . k. k.
至此 , , , 证明结束 . . .
构造方案 : : : 拆点二分图的 x 1 → x 2 + n → x 2 → x 3 + n ⋯ x k + n x_1\rightarrow x_{2+n} \rightarrow x_2 \rightarrow x_{3+n} \cdots x_{k+n} x1→x2+n→x2→x3+n⋯xk+n 对应的是原 D a g Dag Dag 中的一条路径 x 1 → x 2 → x 3 ⋯ x k , x_1\rightarrow x_2\rightarrow x_3\cdots x_k, x1→x2→x3⋯xk, x 1 x_1 x1 即为路径起点 , , , x k x_k xk 即为终点 . . . 先将所有的终点放入独立集集合 KaTeX parse error: Can't use function '\H' in math mode at position 1: \̲H̲, 再将与 KaTeX parse error: Can't use function '\H' in math mode at position 1: \̲H̲ 连有向边的点加入集合 N , \N, N, 由于已经传递闭包 , , , 当 KaTeX parse error: Can't use function '\H' in math mode at position 1: \̲H̲\cap\N=\varnoth… 时 , , , 显然在原图中没有路径相连 . . .
否则 , , , 将 KaTeX parse error: Can't use function '\H' in math mode at position 1: \̲H̲\cap\N 的元素向路径起点跳 , , , 所有在交集中的元素都可以被划分到其他路径上 , , , 若无解 , , , 最小路径覆盖有更小解 , , , 矛盾 . . .
1万+



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



