5分钟简单理解P,NP,NPC,NPH

本文简明解释了时间复杂度和多项式时间概念,以及P、NP、NPC和NPH的区别。P问题是能在多项式时间内解决的,NP问题能在多项式时间内验证答案,NPC问题则是能通过其他NPC问题约化来且自身是NP问题,NPH问题即使NPC问题解决也可能无法找到多项式时间算法。目前P是否等于NP仍是未解之谜。
摘要由CSDN通过智能技术生成

关于P, NP, NPC, NPH名词的解释, 网上的文章很多都是太长太专业或读不懂, 这里简单快速的整理一下我的理解,
可能不够专业准确, 但是能帮助你快速理解, 形成认知上的概念

为了理解这几个名词, 先要说明 时间复杂度 和 多项式时间 的概念

时间复杂度 与 多项式时间

时间复杂度 O ( n ? ) O(n?) O(n?)用来评估算法的计算工作量的大小, 通常写成n的某种数学表达式, 其中 n n n代表输入数据数量

它可以是多项式(常数乘法次方等)

1 1 1, n n n, log ⁡ n \log n logn, n 2 n^{2} n2, n 3 n^{3} n3

也可以是非多项式(指数阶乘等)

2 n 2^{n} 2n, n ! n! n!

其计算量层级大小关系如图,

O ( 1 ) < O ( log ⁡ n ) < O ( n ) < O ( n log ⁡ n ) < O ( n 2 ) < O ( n 3 ) < O ( 2 n ) < O ( n ! ) O(1) < O(\log n)<O(n)<O(n \log n)<O(n^{2})<O(n^{3})<O(2^{n})<O(n!) O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)<O(2n)<O(n!)

多项式形式就是我们中学数学用笔算的那些, 通常可以在有限的时间内计算出结果, 也叫做在多项式时间内解决

而非多项式的计算量, 会在n增大时爆发式增长,无法在有限的时间内纯靠跑完计算得出结果

举个简单的例子
假设 n = 100 n=100 n=100,
多项式 n 2 = 10 0 2 = 10000 n^{2}=100^{2}=10000 n2=1002=10000就是个口算题
非多项式 2 n = 2 100 ≈ 1.26765 ∗ 1 0 30 2^{n}=2^{100}\approx1.26765*10^{30} 2n=21001.267651030
这个数字有多大呢? 世界上最快的超级计算机(截止2020年11月TOP500数据)每秒计算量也才堪堪达到 4.42 ∗ 1 0 17 4.42*10^{17} 4.421017, 大概要跑9万年, 这个计算量的算法肯定是不可取的

有了上面的概念, 我们来理解P, NP, NPC, NPH

P问题: 能找到在多项式时间里解决它的算法
能到找一个算法, 即使n很大, 也能在有限的时间内跑完, 求出最佳答案的
简单而言就是我们现在能算出最优解的,

NP问题: 能在多项式时间里验证它的答案
不能确定是否在多项式时间内找到答案,但是可以在多项式时间内验证答案是否正确
简单而言就是你随便瞎蒙个答案, 要判断这个答案对不对, 我还是能做到的

由上面两个概念可以得出: P ∈ N P P \in NP PNP
因为能多项式地解决一个问题,必然能多项式地验证一个问题的解

NPC(NP-Complete/NP完全):
1. 所有的NP问题都可以reduce到某个问题C,
2. 且C是NP问题。

reduce是指Reducibility(约化/归约),如果问题A可以约化为问题B,那么用B的解法就可以解决A(或者说问题A可以“变成”问题B)

也就是说如果NPC问题解决了(或者也叫做NPC问题发现了多项式级的算法),任意NP问题都可以套用该方法解决。NPC能强悍到能通解NP,那么它自然是NP问题中最难的那一部分。

NPH问题(NP-Hard/NP难):
1. 所有的NP问题都可以reduce到某个问题H,
2. 但H不一定是NP问题。

即使NPC问题解决了,NPH问题有可能仍然无法得到多项式级的算法,也就是说NPH至少是NPC,甚至是比NPC更难的问题。

对于NP最终能否等于P,目前还是存在争议等待被验证的问题。

所以暂定P!=NP,则P, NP, NPC, NPH的关系图,根据之前的描述如下
2021-07-16 今天读到《数学之美》,附录里面就提到了于计算复杂度,依照里面的描述,略微补充之前的措辞。书里也同样也有一张和下图意思一致的插图(P!=NP情况下)。
在这里插入图片描述
旅行商问题而言,
如果求解内容不同也可能变成不同问题

求解问题属于备注
求相邻最近的两个地点P问题循环套循环, 得出所有两点间的距离, 时间复杂度O( n 2 n^2 n2)
求途经所有地点行程小于500公里的路径NP问题虽然没有好的算法, 但是给我一个路径我还是能告诉你是否小于500公里的
求途经所有地点的最短路径NPH问题即使你给我一条路径, 我也不能判定它就一定是最短的

参考文档:
https://zhuanlan.zhihu.com/p/22497908
https://zhuanlan.zhihu.com/p/40140362

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值