算法设计与分析复习(三):求解困难问题-NP完全问题
来源:互联网 发布:入住淘宝需要什么条件 编辑:程序博客网 时间:2024/06/05 10:25
参考书籍:算法设计与分析——C++语言描述(第二版)
求解困难问题-NP完全问题
NP完全问题
一般,将能在多项式时间内求解的问题看做易处理问题(tractable problem),而将至今尚未找到的多项式时间算法求解的问题视为难处理问题(intractable problem)。对于难处理问题,虽然至今尚未有人给出它们的多项式时间算法,但也同样未能证明对于此类问题不存在多项式时间算法。经过研究,发现这类难解问题在计算上是相关的,被称为NP难度或NP完全问题。关于这类问题的有意义的结论是:一个NP完全问题可以在多项式时间内求解,当且仅当所有其他的NP完全问题都可以在多项式时间内求解。如果任意一个NP难度问题存在一个多项式时间算法,那么所有NP完全问题都可以在多项式时间内求解。
还有一类问题被称为不可判定(undecidable)的,无论消耗多少计算机时间和空间也不能求解。所谓“停机”问题就是不可解的。
P类和NP类问题
定义(P类和NP类):P是所有可以在多项式时间内用确定算法求解的判定问题的集合。NP是所有可在多项式时间内用不确定算法求解的判定问题的集合。
因为确定算法只是不确定算法当Choice
函数只有一种选择时的特例,所以有
定义(多项式约化):令
这就是说,求解
对于约化存在以下性质:
- 性质1:若
Q1∈P ,Q2∝Q1 ,则有Q2∈P 。 - 性质2:若
Q1∝Q2 ,Q2∝Q3 ,则有Q1∝Q3 。
NP难度和NP完全问题
NP难度:对于问题Q以及任意问题
NP完全:对于问题
上面定义表明一个问题是NP难度的,但不一定是NP完全的。一个NP难度问题,如果不是NP类问题,则不是NP完全的。所有NP完全问题都是NP难度的,反之不然。
根据性质1和NP难度问题的定义可以知道,只要对任何一个NP难度问题Q,找到它的多项式时间算法,那么,可以断定所有NP类问题都能在多项式时间内求解,因为所有的NP类问题都能约化到问题Q。
一般证明某个问题Q是NP难度的,证明策略由以下两步组成:
- 选择一个已经证明是NP难度问题
Q1 - 求证
Q1∝Q
如果进一步表明Q本身是NP类的,则问题Q是NP完全的。
Cook定理
可满足性问题(satisfiability problem)是一个判定问题,它确定对于一个给定的命题公式,是否存在布尔变量的一种赋值(也称真假指派)使该公式为真。CNF可满足性是指判定一个CNF公式的可满足性。(CNF:conjunctive normal form,合取范式)
定理:(**Cook定理)可满足性问题在P中,当且仅当
定理:CNF可满足性问题是NP完全的。
一些典型的NP完全问题
证明一个问题Q是NP难度(或NP完全)问题的具体步骤:
- 选择一种已知的具有NP难度的问题
Q1 ; - 证明能够从
Q1 的一个实例I1 ,在多项式时间内构造Q的一个实例I; - 证明能够在多项式时间内从I的解确定
I1 的解; - 从2和3可知,
Q1∝Q ; - 由1和4及约化的传递性得出所有的NP类问题均可约化到Q,所以Q是NP难度的;
如果Q是NP类问题,则Q是NP完全的。
- 最大集团问题
- 定理:CNF可满足性
∝ 最大集团判定问题。 - 顶点覆盖
- 最大集团判定问题
∝ 顶点覆盖判定问题。 - 3元CNF可满足性
- CNF可满足性
∝ 3元CNF可满足性。 - 图的着色数
- 3元CNF可满足性
∝ 着色数判定问题。 - 有向哈密顿环
- CNF可满足性问题
∝ 有向哈密顿环问题 - 恰切覆盖
- 3-可着色问题
∝ 恰切覆盖问题 - 分划问题
- 子集和数问题
∝ 分划问题
小结
Cook定理证明了(CNF)可满足性问题是NP完全的,所有NP类问题都可以约化到可满足性问题。
CNF可满足性
如果一个问题一经证明是NP难度的,可不必致力于寻找多项式时间算法,而采取其他多种算法设计策略,例如:启发式算法、局部寻优、随机算法和近似算法、演化算法和神经网络等。
- 算法设计与分析复习(三):求解困难问题-NP完全问题
- 算法分析与设计复习-P,NP,NPC问题
- 算法设计与应用基础:NP完全问题作业
- 算法:NP问题,NP完全问题(NPC),NPhard问题
- 算法设计与分析笔记之(8):NP问题
- 算法概论 | NP完全问题
- 算法程序与设计之NP问题
- NP-complete问题(NP完全问题)
- 计算复杂性与NP完全问题
- 漫谈算法(三)NP问题
- NP困难问题的理解
- [总结]算法中的P问题、NP问题、NP完全问题和NP难问题
- 算法中的P问题、NP问题、NP完全问题和NP难问题
- 算法导论里的NP完全问题
- 算法学习笔记--NP完全问题
- 算法---->NP-难度和NP-完全的问题
- NP、NP-完全、NP-难问题
- NP,NP-heard,P,NP完全问题
- 大数据WEB阶段(十二)会话技术、Cookie、Session及两者的区别
- 微服务随想
- HTTP详解--与HTTP协作的Web服务器
- 个人总结56
- ACdream 1064
- 算法设计与分析复习(三):求解困难问题-NP完全问题
- 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式
- HTTP详解--基于HTTP的功能追加协议
- Java学习笔记-java的发展和跨平台原理
- 接口和软件包
- Oracle--Round函数
- CDH Resource Tunning
- HTTP的缺点
- java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher