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 问题。

举例: “求解一元一次方程” 问题可以约化成 “求解一元二次方程” 问题,只需要令 “求解一元二次方程” 问题中二次项系数为 0 0 0 即可解决 “求解一元一次方程” 问题。

因此可以发现,约化的过程是难度升级的过程。问题 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 问题满足条件:

  1. 该问题是一个 NP \text{NP} NP 问题。
  2. 该问题可以由一个已知的 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 问题的输入和输出都可以转换成逻辑电路的输入和输出(想想计算机内部也不过是一些 0 0 0 1 1 1 的运算),因此对于一个 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? 早日得以解决,我们可以早日攀登上这计算机科学的顶峰。💪💪💪

P、NPNPC、NP-hard和多项式归约是计算复杂度理论中的重要概念。 P问题指的是可以在多项式时间内解决的问题,也就是说,存在一个多项式时间的算法可以在合理的时间内解决该问题。 NP问题指的是可以在多项式时间内验证解的正确性的问题。也就是说,如果已经给出了一个解,我们可以在多项式时间内验证它是否是正确的。但是,目前并没有已知的多项式时间算法可以解决所有的NP问题。 NPC问题指的是NP问题中最难的一类问题,即NP完全问题。如果一个问题是NP完全问题,那么它是NP问题的一种,并且所有的NP问题都可以归约到该问题。也就是说,如果我们能够在多项式时间内解决一个NPC问题,那么我们也可以在多项式时间内解决所有的NP问题。 NP-hard问题指的是至少和NPC问题一样难的问题,但不一定是NP问题。也就是说,NP-hard问题可能是更加困难的问题,但是它们至少和NPC问题一样难。 多项式归约是指将一个问题转化为另一个问题,使得解决原问题的算法可以用来解决目标问题。如果一个问题可以在多项式时间内归约为另一个问题,那么我们称它是多项式归约的。 P=NP和P≠NP是计算复杂度理论中的两个重要假设。P=NP的意思是,所有的NP问题都可以在多项式时间内解决。P≠NP的意思是,存在一些NP问题是不能在多项式时间内解决的。目前,这两个假设没有被证明或者证伪,它们仍然是计算复杂度理论中的重要问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gene_INNOCENT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值