算法设计与分析 NP完全问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

NP 完全问题
研究P=NP 的问题有两条基本思路:
1.证明NP 类中的某些问题是难解的,从而得到NP ≠P 。

但是要证明这一点几乎同证明P=NP 一样困难。

2.考察NP 类中问题之间的关系,从中找到一些具有特殊性质的、与P 类问题显著不同的问题。

沿着这一路线人们已经证明了在NP 类中存在被称为NP 完全的子类,简称NPC 问题,并由此发展了一套著名的NP 完全理论。

本节简要先介绍NP 完全性理论。

为此,首先给出各语言之间的多项式变换的概念。

定义 1 所谓从一个语言*11∑⊆L 到另一个语言*22∑⊆L 的多项式变换是指
满足下面两个条件的函数*2*1:∑→∑f ,
(1) 存在计算f 的一个多项式时间DTM 程序;
(2) 对于所有的*1∑∈x 有:1L x ∈当且仅当2)(L x f ∈。

用21L L ∝表示存在一个从语言1L 到语言2L 的多项式变换。

相应地,对于判定问题21,∏∏,设e 1和e 2是相应的编码策略。

若],[],[2211e L e L ∏∝∏,则记为21∏∝∏。

也可以从问题的层次来叙述:由判定问题1∏到判定问题2∏的多项式变换是满足下列条件的函数21:∏∏→D D f ,
(1) f 可由一个多项式时间的确定性算法来计算;
(2) 对于所有的1∏∈I D 有:1∏∈I D 当且仅当2)(∏∈I Y f 。

定义2 称一个语言L (判定问题∏)为NP 完全的(NPC ),如果)(NP NP L ∈∏∈,且对于所有别的语言NP L ∈'(判定问题NP ∈∏')均有)'('∏∝∏∝L L 。

按照定义2,要证明问题∏是NP 完全的,需要证明所有的NP 问题均能够经多项式变换变成∏。

这几乎是很难做到的。

如果NP 完全问题比较多,我们也不能对每一个这样的问题都这样验证。

为此我们讨论一些NPC 问题的有用的性质。

性质1 如果L L ∝',则P L ∈意味着P L ∈'。

性质2 如果"'L L L L ∝∝而且,则"'L L ∝。

由性质1,2,不能推出下列结论,
定理 2 设∏是NP 完全的,如果NP P ≠,则P NP \∈∏。

定理 3 如果L L NP L L ∝∈',,',则NPC L NPC L ∈⇒∈'.
定理3是证明NP 完全问题的基础。

但这需要一个NPC 问题作为源问题。

Cook 首先给出这样问题--可满足性问题。

可满足性问题是数理逻辑中一个重要问题,它定义在布尔变量之上。

给定布尔变量集},,,{21m u u u U =,U 上的一个真值分配是指一个映射 },{:F T U t →。

U 上的一个子句C 就是由一些布尔变量(或它们的“否”)通过逻辑“或”连接起来的布尔表达式。

若存在对于布尔变量集U 的一个真值分配,使得该子句取值为真,则说该子句被满足。

子句的集合说是可满足的,如果存在U 的一个真值分配,使得集合中的每个子句的取值均为真。

可满足性问题可描述如下:
例 给定布尔变量之集U 以及U 上子句的一个集合C 。

问 是否存在U 的一个真值分配,使得C 是可满足的。

Cook 定理 可满足性问题是NP 完全问题。

从Cook 的开创性工作至今,人们已经发现并证明了数千个NPC 问题(如,0/1背包问题和Hamilton 回路问题),总结出证明NP 完全性的几种方法,并建立了如何分析、进而近似求解NP 完全问题的方法等一系列理论结果。

以下列出几个典型的NPC 问题:
✧ 三维匹配问题3DM(3 Dimensional Matching)
例: 给定三个互不相交的、均含有q 个元素的集合Y X W ,,,取Y X W M ⨯⨯⊆。

问: M 包含一个匹配吗?即是说,是否存在一个子集M M ⊆',使得q M =|'|,且'M 中任意两个三元组都没有相同的分量。

✧ 三元精确覆盖问题X3C(Exact Cover by 3-sets)
例:给定有限集合 q X X 3||,=,以及X 的三元子集族C 。

问:C 含有X 的一个精确覆盖吗?即是说,是否存在一个子族C C ⊆',使得X 的每个元素恰好只出现在'C 的一个三元子集中。

注意到,如果令Y X W U ⋃⋃=,},,|},,{{Y y X x W w y x w C ∈∈∈=,则三元匹配问题就转化为三元精确覆盖问题。

又因为三元匹配问题是NP 完全问题,所以,由三元匹配问题是NPC 问题,可以知道,三元精确覆盖问题也是NPC 问题。

✧ 顶点覆盖问题VC (Vertex Cover )
例:给定一个图G(V,E)和一个正整数K ≤|V|.
问:是否存在G 的一个顶点数不超过K 的覆盖?即是否存在一个顶点子集V /⊆ V,|V /|≤ K ,使得对于每一条边
{u,v}∈E ,u 与v 中至少有一个属于V /.
✧ Hamilton 回路问题HC (Hamiltonian Circuit )
例:已知一个图G(V,E)。

问:G 含有一个Hamilton 回路吗?G 的Hamilton 回路是指包含图G 的所有顶点的简单回路,即是G 的顶点的一个排序:[v 1,v 2,⋯ , v n ],其中n=|V|,使
得对所有的i: 1 ≤ i ≤ n, { v i ,v i+1}∈E ,{ v n ,v 1}∈E.
✧ 划分问题
例 已知一个有限集合A 及对于每个A a ∈的一个权值+∈Z a s )(。

问 问是否存在A 的一个子集A A ⊆',使得∑∑∈∈=
'
\')()(A A a A a a s a s ? ✧ 三元可满足性问题 3SAT
例子 给定布尔变量的一个有限集合U 及定义于其上的字句集},,,{21m c c c C =,其中m i c i ,,2,1,3|| ==
问题 是否存在U 之上的一个真赋值,使得C 中所有的子句均被满足?。

相关文档
最新文档