§5. 8 小结
DESCRIPTION
§5. 8 小结. 证明一个问题是 NP 完全问题的方法变化多端, 这是因为要证明的问题本身相互间的差异很大 启示 : 如何着手开始证明过程。 在下面的叙述中我们略去问题 Π 属于 NP 的证明. 1. 限制法. 最简单又最常用的方法。为证明问题 Π 是 NP 完全问题。 选定一已知 NP 完全问题 Π ′ , 只要证明 Π ′ 是 Π 的特例即可, 即只要对 Π 的实例的叙述作限制就得到了问题 Π ′ 的实例的叙述。 就得到了 Π ′ ∝ Π. Π ′ 是 Π 的特例, 则 Π ′ 的实例就是 Π 的实例 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/1.jpg)
1
§5. 8 小结
![Page 2: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/2.jpg)
2
• 证明一个问题是 NP 完全问题的方法变化多端,• 这是因为要证明的问题本身相互间的差异很大• 启示 : 如何着手开始证明过程。• 在下面的叙述中我们略去问题 Π属于 NP 的证明
![Page 3: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/3.jpg)
3
1. 限制法• 最简单又最常用的方法。为证明问题
Π 是 NP 完全问题。• 选定一已知 NP 完全问题 Π′ ,• 只要证明 Π′ 是 Π 的特例即可,• 即只要对 Π 的实例的叙述作限制就得到了问题 Π′ 的实例的叙述。• 就得到了 Π′ ∝ Π
![Page 4: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/4.jpg)
4
• Π′ 是 Π 的特例,• 则 Π′ 的实例就是 Π 的实例• 很容易构成从 Π′ 到 Π 的多项式转换。
![Page 5: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/5.jpg)
5
• 例 有向哈密尔顿回路问题 ( 简称 DHC)• 实例:有向图 D = (V , A) ,其中 V 是节点集合,• A 是有向弧、即有序对 (u , v) 的集合 (u , v∈
V) .• 问:图 D 是否有一条有向哈密尔顿回路• v1 , v2,…vn , (n = IVl)• 即• (vi , vi+1) ∈ A (i = 1 , 2 ,…, n – 1)• (vn , v1) ∈ A
![Page 6: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/6.jpg)
6
• 图论知识告诉我们无向图是有向图的特例• 对有向图作下述限制,有向图就变成无向图:• 有向图 D = (V , A) 任两个节点 u ,
v 之间,• 如果有有向弧存在,• 则两条相反方向的弧同时存在,• 即 (u , v) ∈ A, 且 (v , u) ∈A
![Page 7: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/7.jpg)
7
• 不难证明 HC∝DHC .• 由 HC 问题的实例图 G = (V , E)构造 DHC 问题的实例 D=(V , A) ,• 即 G 和 D 有相同的节点集合;• (u , v) ∈ A, (v , u) ∈ A 当且仅当 (u , V) ∈ E .• 显然 G 有哈密尔顿回路的充分必要条件为 D 有有向哈密尔顿回路。
![Page 8: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/8.jpg)
8
• 例 打中集合问题 (HS)• 实例:集合 S 及其子集的蒐集 C ,• 正整数 K• 问:是否有元素个数不大于 K 的子集• S′⊂S (|S′|≤K) ,• 使蒐集 C 中每一个 c ∈ C 至少有一个元素属于 S′.• 注意 : c 是 S 的子集
![Page 9: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/9.jpg)
9
• 顶点覆盖问题 (VC) 是打中集合问题HS 的特殊情况,
• 只要令 C 中每一个子集 c 只含两个元素 (|c|=2) 即可。• 由 VC 实例图 G=(V , E) 及正整数 K,• 构造 HS 实例如下:• 令 S=V, 蒐集 C =E, 同样的正整数 K.• VC 问题实例有 K 覆盖的充分必要条件为 HS 问题实例有 K 打中集合。
![Page 10: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/10.jpg)
10
• 显然 VC 问题实例有解的充分必要条件为 HS 问题实例有解。• 构成的蒐集 C = E, C 中元素 c 为
E 之元素 , 即为 G 之边 .• 要求 E 的边的两端必有一端在打中集合 J 中 .• 因此 , 构成的 HS 的实例和源像 V
C 问题实例一模一样 .
![Page 11: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/11.jpg)
11
• 例 子图同构问题 ( 简称 SI ,见本章第 2 节 )• 集团问题 CL 是 SI 问题的特殊情况 ,• 只要令 SI 实例中的图 G2 为完全图即可。• 不难证明• CL∝ S1
![Page 12: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/12.jpg)
12
• 一个图称为完全图是指图的任意两个节点之间都有边存在。• CL 问题实例为图 G = (V , E) 及正整数
J. • 由此构造 SI 问题的实例• G1 = (V , E) 、 G2 = (V2 , E2), 即 G1与 G 相同;• | V2 | = J ,即 G2 为有 J 个节点的完全图• 容易证明 CL 问题实例及由此构造的 S1问题的实例必然• 同时有解或者同时无解。
![Page 13: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/13.jpg)
13
• 例 有界支撑树问题 ( 简称 BST)• 实例:图 G = (V , E)• 正整数 K≤|V| - 1• 问: G 是否含有支撑树,且树中每一个节点的度数小于或等于 K ,• 如令 K = 2 ,则 BST 问题变成所谓的• 哈密尔顿路径问题 ( 简称 HP)
![Page 14: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/14.jpg)
14
• 实例:图 G = (V , E)• 问: G 是否有一条哈密尔顿路径,即一个包含所有节点的序列• vi , vi+1,…vn , (n = IVl) • (vi , vi+1) ∈ E (i = 1 , 2 ,… , n -
1)• 易证 HP 问题是 NP 完全问题。• 现在只要证明• HP ∝ BST • 就证明了 BST 问题是 NP 完全问题 .
![Page 15: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/15.jpg)
15
• 2 .局部替换法• 这种证明方法中的多项式转换不象限制法那样简单。• 局部替换法先选定一已知的 NP 完全问题 Π′ ,• 在 Π′ 的实例中确定一些组成部分 ( 称为基本单元 ) ,• 然后将这些基本单元用统一的方法进行转化,• 这样就得到了待证问题 Π 的实例。
![Page 16: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/16.jpg)
16
• 证明三可满足问题时使用的就是局部替换法,• 在 SAT 问题实例中确定的基本单元是 “项”,• 再将 SAT 实例中的每一项转化成项集合• 这些新的项都只含三个因子。其间的转化是统一的。• 要指出的是转化是局部的,• 即一个项的转化不受其它项的影响,• 也不影响其它项的转化。
![Page 17: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/17.jpg)
17
• 例 三角形分割问题 (PT)• 实例:图 G = (V , E) , • |V| = 3q (q 为正整数 )• 问:是否能将 G 作三角形分割 ?• 三角形分割是指,将 V 划分成 q 个互不相交的子集,每个子集 vi 含三个节点即 • vi = {al , a2, a3}• 且(al , a2) ∈ E , (a2, a3) ∈ E , (a3 , al) ∈
E
![Page 18: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/18.jpg)
18
• 证 选择三覆盖问题为已知的 NP 完全问题 ( 其证明略 ) 。• 三覆盖问题 ( 简称 X3C)• 实例:有限集合 X, • 且 IXI = 3q (q 为正整数 ) ;• 集合 C = {c} ,• 其中 c 是含三个元素的 X 的子集• 问:是否存在 C 的子集 C′ , C′ ⊂ C ,• 且使 X 的每一个元素出现并只出现在
C′ 的一个元素 ci 中。
![Page 19: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/19.jpg)
19
• 用局部替换法证明 PT 是 NP 完全问题,• 确定 X3C 问题的基本单元为 X 的子集
ci
• 即 C 中的元素。将• ci = {xi , yi , zi}• 转化为子图• Gi = (Vi , Ei) , | Vi | = 12 , | Ei |= 18
![Page 20: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/20.jpg)
20
xi yi zi
ai3 ai9
ai3
ai1 ai2 ai4 ai5 ai7 ai8
![Page 21: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/21.jpg)
21
• 在三角形分割问题 (PT) 的像实例定义为• G = (V , E)• 其中• V = X U U {ail, ai2, ai3, ai4, ai5, ai6}• i
• E = U Ei• i
• 上述将 X3C 问题的实例转化为 PT问题实例的映射是多项式转换
![Page 22: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/22.jpg)
22
• 这个转换把 X3C 实例的的元• ci = {xi , yi , zi}• 转换为一个含有 12 个结点、 18 条边的子图 .• 转换一个元所需时间为一常数 .• 整个转换需要时间为 p 的多项式• p = |C|• 现在证明 X3C ∝ PT
![Page 23: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/23.jpg)
23
• X3C 的实例存在 C 的子集 C′ , • C′ ⊂ C ,• 且使 X 的每一个元素出现并只出现在 C′ 的一个元素 ci 中• 的充分必要条件为• 该实例在 PT 问题的像实例• G 能作三角形分割
![Page 24: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/24.jpg)
24
• 设 X3C 的实例存在 C 的子集 C′ , C′ ⊂ C ,• 且使 X 的每一个元素出现并只出现在 C′ 的一个元素 ci 中• 现将 G 作三角形分割如下• 分两种情况• ci = {xi , yi , zi}
•① ci 属于 C′ ② ci 不属于 C′
![Page 25: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/25.jpg)
25•情况① , 按红线分割 , 该子图被分割了xi yi zi
ai3 ai9
ai3
ai1 ai2 ai4 ai5 ai7 ai8
![Page 26: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/26.jpg)
26
• 情况② , 按红线划分
• xi,yi,zi 没有被分割 , 但是它们必定属于某 ci
• 所以必定在其它元中被分割了xi yi zi
ai3 ai9
ai3
ai1 ai2 ai4 ai5 ai7 ai8
![Page 27: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/27.jpg)
27
• 可以看到 , 图 G 确实被三角形分割了• 三角形分割是指,将 V 划分成 q个互不相交的子集,• 按红线分成子集 vi
• 每个子集 vi 含三个节点• 并且这三个结点之间有三条边• 充分性证毕
![Page 28: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/28.jpg)
28
• 现在证明必要性 .•设 PT问题的像实例• G 能作三角形分割•即能将图的所有结点分成子集 vi
• 每个子集 vi 含三个节点• 并且这三个结点之间有三条边• 现考虑结点 ai3
![Page 29: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/29.jpg)
29
• ai3 必定在某子集 vi 中•① ai3 和 ai6 在同一子集中•② ai3 和 ail 在同一子集中
![Page 30: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/30.jpg)
30
xi yi zi
ai3 ai9
ai3
ai1 ai2 ai4 ai5 ai7 ai8
![Page 31: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/31.jpg)
31
• 只有与 ai3 有边连接的结点才有可能和 ai3
• 在同一个子集中 vi• 所以考虑以上两情况•① ai3 和 ai6 在同一子集中•那么在同一个子集中的第三结点必然是 ai9
•因为只有 ai9 和 ai3 、 ai6 都有边相连接• ai3 、 ai6 、 ai9 组成 vi
![Page 32: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/32.jpg)
32
• 与此同时 xi 必定和 ai1 、 ai2 组成子集vi
• 同理• yi 必定和 ai4 、 ai5 组成子集 vi
• zi 必定和 ai7 、 ai8 组成子集 vi
• 情况和前面的分割相同 (P25)
![Page 33: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/33.jpg)
33
•② ai3 和 ail 在同一子集中 ,•那么在同一个子集中的第三结点必然是 ai2
• ai1 、 ai2 、 ai3 组成子集 vi
• 同理• ai4 、 ai5 、 ai6 组成子集 vi•
ai7 、 ai8 、 ai9 组成子集 vi• 情况和前面的划分相同 (P26)• 而 xi , yi , zi 没有在这个元参与分割• 但是必定在其它元参与分割
![Page 34: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/34.jpg)
34
• 构造 X3C 实例的解如下• 考虑前述情况①的元 , • 由这些元的三个结点
xi , yi , zi
• 组成 ci = {xi , yi , zi}• 情况①的诸 ci 构成的集合就是 C′
![Page 35: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/35.jpg)
35
• 显然 , 诸 ci 是 C 的元素 . 且只含三个元素• 所以C′ ⊂ C• 下面证明 X 的每一个元素出现并只出现在
C′ 的一个元素 ci 中• 设 x 为 X 的任意一个元素• 按照转换 , x 必定属于某些元 ( 可能多个 )• 并必定在分割中属于某三角形• 它只能属于情况①的分割 (P25)
• 因此 , x 属于前页构造的 ci = {xi , yi , zi}
![Page 36: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/36.jpg)
36
• 但是它属于情况①的分割 (P25)• 只此一次 , 因为三角形分割的定义• 诸 vi 是互不相交的• 所以 x 只出现在 C′ 的一个元素 ci 中• 证毕
![Page 37: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/37.jpg)
37
• 例 串行流程问题 (SWI) • 实例: T = {t} 为任务集合• 三个映射• r : T→ Z (Z 为非负整数集合 ) • d : T→ Z+ (Z+为正整数集合 )• l : T→ Z+• r(t)表示任务 t 最早可以开始的时间,• d(t)表示任务最迟必须完成的时间,•l(t)表示任务 t 完成所需之时间。
![Page 38: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/38.jpg)
38
• 问:是否存在时间表,即映射• σ : T→ Z • 表示任务 t安排在 σ(t) 时开始。
![Page 39: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/39.jpg)
39
• 且要求每个任务 t∈T 及 t′≠t, 满足三条件• σ(t) ≥r(t)• σ(t)+l(t)≤d(t)• σ(t′)+l(t′) ≤σ(t)• 或 σ(t)+l(t) ≤σ(t′)• 其中第三个条件是指任意两个不同任务的工作不重叠。
![Page 40: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/40.jpg)
40
• 3. 合成法• 合成法比前两种方法复杂。• 顶点覆盖问题及• 哈密尔顿回路问题的• 证明使用的就是合成法。
![Page 41: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/41.jpg)
41
• 合成法的思路是这样的• 由已知的 NP 问题 Π′ 的实例的几种成份• 构造待证问题 Π 的实例的成份,再将这些成份拼装成 Π 的一个实例,• 拼装过程中还要加一些结构• 才能将那些孤立无关的成份组成一个实例
![Page 42: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/42.jpg)
42
• 在局部替换法中• 将 Π′ 实例的基本单元统一转化,无须拼装• 而在合成法中成份的构造不是统一的• 且还需要拼装才能得到问题 Π 的实例
![Page 43: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/43.jpg)
43
• 顶点覆盖问题的证明中曾给出映射• f : 3SAT→VC• 映射 f 将 3SAT 实例中的成份逻辑变量 ui ∈U• 转化为一条边,• 将另一个成份 Ci ∈ F 转化为• 一个三角形,• 然后再连接边和三角形,• 从而得到 VC 的实例。
![Page 44: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/44.jpg)
44
• 哈密尔顿回路问题的证明使用了映射• t : VC → HC• 映射 t 将 VC 问题实例的每条边构造成元 ( 有十二个节点、十四条边 ) ,• 由此再对 VC 实例的每个节点构造链,• 对正整数 K 构造 K 个节点,• 映射 t 最后将这 K 个节点与 n 条链连接• ( 设 VC 实例有 n 个节点 ) ,• 从而构造起 Hc 问题的实例。
![Page 45: §5. 8 小结](https://reader030.vdocuments.pub/reader030/viewer/2022012306/56813600550346895d9d7524/html5/thumbnails/45.jpg)
45
• 由于 NP 完全问题至今还没有高效的算法,• 因此一部分计算机科学家将精力用于•寻找 NP 完全问题的近似解算法