NP、P、NPC、NP-hard 概念辨析
NP 问题
定义:
非确定型图灵机在多项式时间内可以找到解的问题,简单说就是可以在多项式时间里验证一个解的问题。
延伸:
P\text{P}P 问题属于 NP\text{NP}NP 问题,但 P\text{P}P 问题是否等于 NP\text{NP}NP 问题,目前仍然是一个世界难题。所以请注意 NP\text{NP}NP 问题绝不是指在多项式时间内找不到解的问题,切勿混淆概念。
P 问题
定义:
确定型图灵机在多项式时间内可以解决的问题,简单说就是可以在多项式时间里解决的问题。
延伸:
通常来说,P\text{P}P 问题在生活中更有意义。因为可以在多项式时间里解决就意味着问题复杂度不会随着数据规模的扩大而指数爆炸,在生活中更容易被解决。
补充一句,所有的 P\text{P}P 问题都是 NP\text{NP}NP 问题。
约化(Reducibility)
要引出 NPC\text{NPC}NPC 问题,就必须提到约化。
定义:
A\text{A}A 问题可以约化成 B\text{B}B 问题,代表可以用 B\text{B}B 问题的解法解决 A\text{A}A 问题。
举例:
“求解一元一次方程” 问题可以约化成 “求解一元二次方程” 问题,只需要令 “求解一元二次方程” 问题中二次项系数为 000 即可解决 “求解一元一次方程” 问题。
因此可以发现,约化的过程是难度升级的过程。问题 A\text{A}A 可约化成问题 B\text{B}B,代表 B\text{B}B 问题的时间复杂度高于或者等于 A\text{A}A 问题的时间复杂度,即 A\text{A}A 问题不比 B\text{B}B 问题难。因此一个问题约化成另一个问题,时间复杂度增加了,问题的应用范围也扩大了。
继续思考还可以发现约化具有传递性。如果 A\text{A}A 问题可以约化成 B\text{B}B 问题,B\text{B}B 问题可以约化成 C\text{C}C 问题,则 A\text{A}A 问题一定可以约化成 C\text{C}C 问题。而且如果 C\text{C}C 问题可以解决,那么 A\text{A}A、B\text{B}B 问题均可被解决。
NPC 问题
NPC\text{NPC}NPC 问题即 NP-complete\text{NP-complete}NP-complete 问题、NP\text{NP}NP 完全问题。
定义:
NPC\text{NPC}NPC 问题即为所有 NP\text{NP}NP 问题可以约化到的一个问题,是所有 NP\text{NP}NP 问题中最复杂的问题。
NPC 问题满足条件:
- 该问题是一个 NP\text{NP}NP 问题。
- 该问题可以由一个已知的 NPC\text{NPC}NPC 问题约化到它。
第一个 NPC 问题:
第一个 NPC\text{NPC}NPC 问题是逻辑电路问题,即 “给定一个逻辑电路,是否存在一种输入使输出为 True\text{True}True”。
该问题属于 NPC\text{NPC}NPC 问题的证明十分复杂,如果感兴趣可以自行查阅相关资料。引用一篇文章中对于其证明过程的大致表述,本文的内容也主要参考该篇文章。
逻辑电路问题属于 NPC\text{NPC}NPC 问题的证明过程相当复杂,其大概意思是说任意一个 NP\text{NP}NP 问题的输入和输出都可以转换成逻辑电路的输入和输出(想想计算机内部也不过是一些 000 和 111 的运算),因此对于一个 NP\text{NP}NP 问题来说,问题转化为了求出满足结果为 True\text{True}True 的一个输入(即一个可行解)。
常见的旅行商问题、Hamilton\text{Hamilton}Hamilton 回路问题也都属于 NPC\text{NPC}NPC 问题。
NP-hard 问题
NP-hard\text{NP-hard}NP-hard 问题即满足 NPC\text{NPC}NPC 问题的第二个条件但不一定满足第一个条件,即所有 NP\text{NP}NP 问题都能在多项式时间约化到它,因此 NP-hard\text{NP-hard}NP-hard 问题要比 NPC\text{NPC}NPC 问题范围广,NP-hard\text{NP-hard}NP-hard 问题不一定是 NP\text{NP}NP 问题。
即使 NPC\text{NPC}NPC 问题发现了多项式时间内的算法,NP-hard\text{NP-hard}NP-hard 问题可能仍然无法在多项式时间内解决,甚至 NP-hard\text{NP-hard}NP-hard 问题有可能比所有的 NPC\text{NPC}NPC 问题的时间复杂度更高且更难解决。
上述四类问题的关系如下图所示:
后记
本文只能算是简单的介绍了一些 NP\text{NP}NP、P\text{P}P、NPC\text{NPC}NPC、NP-hard\text{NP-hard}NP-hard 这几个概念,感兴趣的读者可以继续查阅相关知识体会该 P=NP?\text{P=NP}?P=NP? 这一世界难题的魅力。
愿 P=NP?\text{P=NP}?P=NP? 早日得以解决,我们可以早日攀登上这计算机科学的顶峰。
NP、P、NPC、NP-hard 概念辨析相关推荐
- P问题、NP问题、NPC问题的概念及实例证明
美剧<基本演绎法>(也就是美版"福尔摩斯")第 2 季第 2 集中,两位研究 NP 问题的数学家被谋杀了,凶手是同行,因为被害者即将证明"P=NP 问题&qu ...
- [zz]澄清P问题、NP问题、NPC问题的概念
[zz]澄清P问题.NP问题.NPC问题的概念 这或许是众多OIer最大的误区之一. 你会经常看到网上出现"这怎么做,这不是NP问题吗"."这个只有搜了,这已经 ...
- 解读P问题、NP问题、NPC问题的概念
刚刚读到<数学之美>,突然看到贝叶斯网络的学习属于NPC问题,于是乎在大脑里面回想起NP.NPC等的区别,遂查阅wiki.别人博客纪录如下. ------题记 以下内容转自MSN-Spac ...
- P、NP、NPC问题最通俗的讲解
转:Matrix67原创 什么是P问题.NP问题和NPC问题 这或许是众多OIer最大的误区之一. 你会经常看到网上出现"这怎么做,这不是NP问题吗"."这个只有 ...
- P、NP、NPC(NP完全问题)、NP-hard问题概述
P.NP.NPC(NP完全问题).NP-hard问题概述 一.概念总结 1.P问题: 能在多项式时间内解决的问题 2.NP问题: 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时 ...
- P、NP、NPC问题
转自:http://blog.csdn.net/wwy851/article/details/6082007 最近看了很多关于P.NP和NPC问题的文章,但是都不是很系统全面,很多叙述的也不太清楚,有 ...
- 算法:NP问题,NP完全问题(NPC),NPhard问题
在做计算机算法关于NP完全问题这一章的作业的时候,发现有很多概念理解的不是很透彻,然后就反复看老师的讲义,在网上查阅各种资料,花了很多时间来弄懂这块的内容.发现书上的概念太正式,定义太标准,不容易很快 ...
- 【算法】P问题 NP问题 NPC问题 NPH问题的定义与理解
一.前言 二.多项式 三.时间复杂度 四.P问题 五.NP问题 六.NPH问题,NPC问题 七.已经被证明的NPC问题 八.一些具体问题的总结 九.总结 一.前言 在讨论算法的时候,常常会说到这个问题 ...
- (数学)P、NP、NPC、NP hard问题
概念定义: http://m.elecfans.com/article/757041.html https://www.cnblogs.com/AndyJee/p/5048556.html P问题:能 ...
- P、NP、NPC 问题解释
P.NP.NPC 问题解释 行文目的 什么是多项式算法 什么是P问题 什么是NP问题 NP问题与P问题的关系 NPC问题 什么是约化(Reducibility) 什么是NPC问题 NP-hard问题 ...
最新文章
- 【Qt】Log4Qt(四):周期性输出日志,并且限制日志文件数量
- Java黑皮书课后题第8章:*8.13(定位最大的元素)编写下面的方法,返回二维数组中最大元素的位置。返回值是包含两个元素的一维数组,这两个元素表示二维数组中最大元素的行下标和列下标
- vue中parameterObject:{}使用
- 转载 OAuth认证协议原理分析及使用方法
- java程序运行过程数据丢失怎么办_java运行过程中OutOfMemoryError是什么原因?怎么解决...
- Android Stuido 快速设置成eclipse的快捷键习惯
- 喵哈哈村与哗啦啦村的大战(四)(树形DP)
- Codeforces Round #529 (Div. 3) D. Circular Dance
- 如何关闭文件服务器的同步,文件服务器同步
- 锻造完美U盘小偷:活用消息机制
- 陶哲轩实分析 习题 12.5.8 :度量空间中有界闭集不一定是紧集
- 信息系统开发与利用 领域分析部分@wangshushu
- [教程] 虚拟机安装MAC lion 10.7.3教程 附送原版提取镜像! 安装
- NES专题——一块带给无数人年少欢乐的CPU(6502)
- wdr7660虚拟服务器设置,TL-WDR7660千兆版路由器怎么设置密码?
- 梯度向量的超简单理解
- 多组两两比较用什么检验方法_方差分析中两两多重比较方法的含义及如何正确选择...
- android简单点餐系统_微信点餐收银系统哪个好用?
- Swift版百思不得姐
- dp主机_DP接口与HDMI接口的区别?
热门文章
- Python单元测试框架之pytest -- fixtures
- [转移]今天做了的一些事
- Spring的bean管理(注解注入属性)
- react实现聊天界面_React-Redux 100行代码简易版探究原理
- 4. 使用Keras-神经网络来进行MNIST手写数字分类
- java手机翻译,使用JUniversal翻译Android项目
- Java获取resin端口_线上解决Resin服务响应过慢的几个方法
- 金融银行业机器学习—机遇、风险、案例
- 机器学习XGBoost 算法概述
- python lasso回归分析_解析python实现Lasso回归