P、NP、NPC、NPH问题的区别和联系
时间复杂度
时间复杂度描述了当输入规模变大时,程序运行时间的变化程度,通常使用\(O\)来表示。比如单层循环的时间复杂度为\(O(n)\),也就是说程序运行的时间随着输入规模的增大线性增长,两层循环的时间复杂度为O\((n^2)\),快速排序的时间复杂度为\(O(nlogn)\),使用穷举法解决旅行商问题的时间复杂度为\(O(n!)\)。时间复杂度根据变化速率的快慢可以分为两类:1、多项式级的时间复杂度,如\(O(1)\),\(O(n),O(n^a),O(logn)\)等;2、非多项式级时间复杂度,如\(O(a^n)\),\(O(n!)\)等。当我们使用计算机解决一个问题时,我们要尽可能地找到一个具有多项式级时间复杂度的算法,非多项式级时间复杂度的算法一般运行时间较长,当输入数据规模较大时很难被接收。
P类问题
如果一个问题能找到在多项式时间内解决它的算法,那么我们说该问题是P类问题。P是多项式(Polynomial)的第一个字母。比如排序问题就是一个P问题,因为我们可以找到一个时间复杂度为\(O(n^2)\)的冒泡排序算法。
NP问题
有些问题比较复杂,如旅行商问题,汉密尔顿回路问题等,当我们使用暴力搜索时,此类问题的时间复杂度为\(O(n!)\),看起来很难找到一个能在多项式时间内解决该问题的算法,而如果别人给了我一个解,我可以很快地验证该解是不是问题的正确答案。比如在汉密尔顿回路问题中,我想验证一条路径是否正确,则验证路径是否正确的时间复杂度为\(O(n)\),为多项式级的时间复杂度。所以,如果我们可以在多项式级的时间内验证一个问题解的正确性,那么我们说该问题是NP问题,也就是说直接找NP问题的一个解可能很慢,当验证NP问题的解却很快。前面提到的汉密尔顿回路就是一个NP问题。NP问题不是“非P问题”,而是非确定性多项式(nondeterministic polynomial)问题。
NPC问题
从上面的介绍我们知道,所以P问题都是NP问题,因为能在多项式时间内解决的问题也能够在多项式时间内验证解的正确性。那么我们还想知道是否所有的NP问题都是P问题,这就是著名的“P对NP问题(P=NP?)”。在2000年美国的Clay数学研究所公布的七个千年数学难题中,P对NP问题位居榜首,可见解决该问题的难度。由于直接证明P对NP问题过于复杂,人们引入了另一类问题--NPC问题(NP -complete,NP-完全问题)。
归约
在介绍NPC问题之前,需要先了解归约的概念。假设有两个问题A和B,对问题A的输入a经过某种规则转换为对问题B的输入b,而A(a)和B(b)的结果相同,也就是说我们可以将求解A问题转换为求解B问题,或者说可以用解决问题B的方法解决问题A,那我们称A可以归约(reducibility,或“约化”)到B。比如问题A为“求解一元一次方程的解”,问题B为“求解一元二次方程的解”,那么我们就可以将问题A归约到问题B,因为求解一元二次方程解的方法可以被用来求解一元一次方程的解。有一点需要注意,问题A不会难于问题B,也就是说,A要归约到更难的问题(时间复杂度更高)。除此之外,归约还具有传递性,如果A可以归约到B,B可以归约到C,那么A可以归约到C。
NPC问题
当一个问题归约到另一个问题时,问题的复杂度变高了,问题的适用范围也更广了。通过对问题的不断归约,我们可以得到更复杂、适用范围更广的问题来替代简单但使用范围小的问题。那么我们就有一个想法 :是否可以将若干相对不那么复杂NP问题不断归约,从而得到一个最难的“超级NP问题”,所有的NP问题都可以归约到这个“超级NP问题”,只要解决了这个“超级NP问题”,那么也就意味着所有NP问题都可以被解决。事实上,存在这样的一类“超级NP问题”,这也就是我们所说的NPC问题。NPC问题的定义如下:如果一个问题Q,它满足以下两条性质:
(1). Q是NP问题
(2). 任一NP问题都可在多项式时间内归约到问题Q
那么我们说问题Q是NPC问题。
Stephen Cook是NPC理论的奠基人,而Richard Karp则证明了组合优化中的大多数经典问题(背包问题、覆盖问题、匹配问题、分区问题、路径问题、调度问题等)都是NPC问题。如果我们给NPC问题找到了一个多项式时间复杂度的算法,那么也就意味着我们给所有的NP问题找到了多项式时间复杂度的算法,从而NP=P,因为P=NP,所以“P对NP问题”就可以被解决。比如背包问题是NPC问题,如果我们给背包问题找到了一个多项式时间复杂度的算法,那么就证明了P=NP,但给NPC问题找一个多项式时间复杂度的算法太难了,所以现在人们普遍相信P≠NP。
NPH问题
上面我们介绍了NPC问题需要满足两条性质,当一个问题仅满足性质(2),而不满足性质(1)时,我们说该问题时NPH问题(NP-hard,NP-难问题)。
4类问题的联系
下图直观地描述了这4类问题之间的联系:

可以看到P类问题是NP问题,NPC问题是NP问题中最难的问题,NPH问题至少与NPC问题一样难。
参考
P、NP、NPC、NPH问题的区别和联系的更多相关文章
- 算法复习-P NP NPC NP-hard概念
from http://blog.csdn.net/huang1024rui/article/details/49154507 P.NP.NPC和NP-Hard相关概念的图形和解释 一.相关概念 P: ...
- p,np,npc,np难问题,确定图灵机与非确定图灵机
本文转自豆瓣_燃烧的影子 图灵机与可计算性 图灵(1912~1954)出生于英国伦敦,19岁进入剑桥皇家学院研究量子力学和数理逻辑.1935年,图灵写出了"论高斯误差函数"的论文, ...
- P,NP,NPC的通俗解释
这或许是众多OIer最大的误区之一. 你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这个只有搜了,这已经被证明是NP问题 了”之类的话.你要知道,大多数人此时所说的NP问题其实都是指的N ...
- 浅谈P NP NPC
P问题:多项式时间内可以找到解的问题,这个解可以在多项式时间内验证. NP问题:有多项式时间内可以验证的解的问题,而并不能保证可以在多项式时间内找到这个解. 比如汉密尔顿回路,如果找到,在多项式时间内 ...
- P,NP,NPC,NPC-HARD
P: 能在多项式时间内解决的问题 NP: 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时间验证的问题 NPC: NP完全问题,所有NP问题在多项式时间内都能约化(Reducib ...
- P类问题,NP,NPC,HPHard,coNP,NPI问题 的简单认识
参考<算法设计技巧与分析>--沙特 问题可以分为判定类问题和最优化问题,判定类问题可以转化为最优化问题,所以下面讨论的是判定类的问题. P类问题是可以在多项式时间 采用确定性算法给出解 ...
- P NP NPC
study from : http://www.matrix67.com/blog/archives/105
- P、NP、NPC和NP-Hard相关概念的图形和解释
P.NP.NPC和NP-Hard相关概念的图形和解释 http://blog.csdn.net/huang1024rui/article/details/49154507 一.相关概念 P: 能在多项 ...
- P问题、NP问题、NPC问题
看师兄们的论文经常说一句这是个NP难问题,所以采用另外一种方法来代替(比如凸松弛,把l0范数的问题松弛为l1范数的问题来求解).然后搜索了相关知识,也还是没看太懂,把一些理论知识先贴上来,希望以后再接 ...
随机推荐
- <video>标签:视频播放器动态设置src
HTML代码 <div id="my_div"> <video id="my_video" width="600" ...
- POI导出带格式的Excel模板——(六)
Jar包
- D3开发中的资料整理
D3开发台阶比较高,需要对html,css,js非常熟练,还要对SVG非常熟悉,SVG不会就不要开发D3了,下面给大家推荐一本资料,为大家未来的开发提供便利. 这个框架产品不支持ie8,是这个产品的特 ...
- 【Python】批量查询-提取站长之家IP批量查询的结果加强版本v3.0
1.工具说明 写报告的时候为了细致性,要把IP地址对应的地区给整理出来.500多条IP地址找出对应地区复制粘贴到报告里整了一个上午. 为了下次更好的完成这项重复性很高的工作,所以写了这个小的脚本. 某 ...
- linux内核驱动中对字符串的操作【转】
转自:http://www.360doc.com/content/12/1224/10/3478092_255969530.shtml Linux内核中关于字符串的相关操作,首先包含头文件: #inc ...
- FarBox--另类有趣的网站服务【转】
FarBox--另类有趣的网站服务 转自:http://mosir.org/html/y2012/the-interesting-web-service-serve-by-FarBox.html 作者 ...
- vue的学习(常用功能)
1.介绍vue MVP和MVVM模式!!! mvp模式,其中m是模型是ajax请求数据, v是视图层(html),p是控制器,就是使用jq来实现业务逻辑相关操作(DOM操作很多) MVVM模式,其中M ...
- plsql developer日期类型数据格式不对如何设置?
当把一个数据库中的数据复制到另一个数据库时,如果数据中包含日期类型,会提示数据格式不正确.或者两个plsql developer设置不同,但实际上建表语句一样. 此时可在plsql中做如下设置: 首选 ...
- [bzoj3123][洛谷P3302] [SDOI2013]森林(树上主席树+启发式合并)
传送门 突然发现好像没有那么难……https://blog.csdn.net/stone41123/article/details/78167288 首先有两个操作,一个查询,一个连接 查询的话,直接 ...
- 关于学生成绩查询的几个SQL语句
数据库有三个字段,名字.学科.成绩,如图 1. 找出每科成绩最高的学生的名字与分数 2.找出总分最高的学生名字与总分 3.找出三科成绩均大于80分的学生