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