P、NP、NPC和NP-Hard

转载https://blog.csdn.net/huang1024rui/article/details/49154507 部分删减

一. 相关概念

P: 能在多项式时间内解决的问题
NP: 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时间验证的问题
NPC: NP完全问题,所有NP问题在多项式时间内都能约化(Reducibility)到它的NP问题,即解决了此NPC问题,所有NP问题也都得到解决。
NP hard:NP难问题,所有NP问题在多项式时间内都能约化(Reducibility)到它的问题(不一定是NP问题)。

二. 四者联系的图形表示

将四种问题用集合表示,它们的关系图1所示。
这里写图片描述
图1 P NP NPC NPhard关系的图形表示

说明:

  1. P问题属于NP问题,NPC问题属于NP问题。

  2. NPC问题同时属于NP hard问题,是NP与NPhard的交集。

三. 进一步解释

3.1 P类问题的概念

P类问题的概念:如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题

3.2 NP问题的概念(Non-Deterministic Polynomial Problems)

N指的是非确定性。
NP问题是指可以在多项式的时间里验证一个解的问题。
NP问题的另一个定义是,可以在多项式的时间里猜出一个解的问题。

之所以要定义NP问题,是因为通常只有NP问题才可能找到多项式的算法。我们不会指望一个连多项式地验证一个解都不行的问题存在一个解决它的多项式级的算法。

3.3 NPC问题

1、约化的定义
一个问题A可以约化为问题B的含义即是,可以用问题B的解法解决问题A。
例: 解一元二次方程可以约化为解一元一次方程。
“问题A可约化为问题B”有一个重要的直观意义:B的时间复杂度高于或者等于A的时间复杂度
约化具有一项重要的性质:约化具有传递性
2、NPC问题
NPC问题 : 首先,它得是一个NP问题;然后,所有的NP问题都可以约化到它。
证明一个问题是 NPC问题也很简单。先证明它至少是一个NP问题,再证明其中一个已知的NPC问题能约化到它(由约化的传递性,则NPC问题定义的第二条也得以满足;至于第一个NPC问题是怎么来的,下文将介绍NPC类问题的“鼻祖”逻辑电路问题)。
3、第一个NPC问题
逻辑电路问题:给定一个逻辑电路,问是否存在一种输入使输出为True

逻辑电路问题属于NPC问题。这是有严格证明的。它显然属于NP问题,并且可以直接证明所有的NP问题都可以约化到它(不要以为NP问题有无穷多个将给证明造成不可逾越的困难)。证明过程相当复杂,其大概意思是说任意一个NP问题的输入和输出都可以转换成逻辑电路的输入和输出(想想计算机内部也不过是一些 0和1的运算),因此对于一个NP问题来说,问题转化为了求出满足结果为True的一个输入(即一个可行解)。

有了第一个NPC问题后,一大堆NPC问题就出现了,因为再证明一个新的NPC问题只需要将一个已知的NPC问题约化到它就行了。后来,Hamilton 回路成了NPC问题,TSP问题也成了NPC问题。现在被证明是NPC问题的有很多,任何一个找到了多项式算法的话所有的NP问题都可以完美解决了。

3.4 NP-Hard问题

NP-Hard问题: 满足NPC问题定义的第二条但不一定要满足第一条(就是说,NP-Hard问题要比 NPC问题的范围广)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值