文章目录
P问题NP问题NP-C问题(NP-Complete)NP-Hard规约**p代表Polynomial,N代表non-deterministic**欢迎大家访问我的GitHub博客
(注意缩写NP代表“Non-deterministic(非确定性)Polynomial(多项式)”而不是代表“Non-Polynomial(非多项式)。)
P问题
确定型图灵机上多项式时间内可解的判定问题
NP问题
非确定型图灵机上多项式时间内可解的问题非确定型多项式时间算法多项式时间内可验证的判定问题问题较难求解,但容易验证所谓多项式指的是验证猜测可在多项式时间内完成,所谓非确定性指的是问题只能通过验证猜测来解,而不能直接求解。
如Hamilton回路是NP问题,因为验证一条路是否恰好经过了每一个顶点可在多项式时间内完成,但是找出一个Hamilton回路却要穷举所有可能性,不能直接求解。
又如大合数的质因数分解,没有给定的公式可直接求出一个合数的两个质因数是什么,但是验证两个数是否是质因数却可在多项式时间完成,所以它也是非确定性多项式问题,即NP问题。
之所以要定义NP问题,是因为通常只有NP问题才可能找到多项式的算法。我们不会指望一个连多项式地验证一个解都不行的问题存在一个解决它的多项式级的算法。
P类问题是NP问题的一个子集。也就是说,能多项式时间地解决一个问题,必然能多项式时间地验证一个问题的解。
NP-C问题(NP-Complete)
该问题是一个NP问题所有属于NP的问题都可以归于为该问题。任何NP中的问题可以在多项式时间内变换成为任何特定NP-C问题的一个特例NPC问题是NP中最难的问题
也即所谓的 NPC问题。正是NPC问题的存在,使人们相信P≠NP。
只要我们找到一个NPC问题的多项式解,所有的NP问题都可以多项式时间内约化成这个NPC问题,再用多项式时间解决
在NP中,但是最不像在P中的问题(P和NPC不相交)
若任何一个NP完全的问题在P内,则可以推出P=NP。
判定一个问题是NP-C:
证明给定该问题的一个解,可以在多项式时间内验证该问题(NP)将一个已知的NP-C问题规约到该问题
可满足问题SAT
判定任意给定的一个bool表达式是否存在一个真赋值
NP-Hard
类似NP-C的定义,但是只需要满足一个条件:
所有的NP问题都可以规约到NP-Hard问题
有多项式时间的算法称为易解的m(n)=O(n^k)
不存在多项式时间的算法称为难解的
规约
将问题A的求解规约到B,因此求解A问题并不会比求解B问题困难
此处是指多项式时间内的规约
需要在多项式时间内完成两个转换:
*把P的输入转化到Q的输入
* 把Q的输出转化到P的输出
参考:
https://akeeper.space/blog/144.html
/AIBigTruth/p/10528090.html