P、NP、NPC 问题解释

  • 行文目的
  • 什么是多项式算法
  • 什么是P问题
  • 什么是NP问题
    • NP问题与P问题的关系
  • NPC问题
    • 什么是约化(Reducibility)
    • 什么是NPC问题
  • NP-hard问题
  • 总结

行文目的

目前网络上(知乎、CSDN等)已经有了很多大佬大神对于NP问题进行过比较详细的解释,其中Paul-Huang在CSDN上发表的文章以及知乎上分享出来的一篇文章对我帮助很大,现在将链接复制在此处,本文的目的在于帮助自己加深理解并且希望能给后来的朋友们进行些许帮助。如果本文有什么描述错误的地方欢迎批评指正。
Paul-Huang 文章链接
Matrix67: The Aha Moments 什么是P问题、NP问题和NPC问题

什么是多项式算法

多项式算法在很多情况下也被解释为有效算法或者好算法,是指一类时间复杂度不超过一个多项式的算法。换句话说,就是指算法的时间复杂度为O(1),O(log(n)),O(na)等的算法,他的数据规模n出现在底数的位置。与之相对应的是非多项式算法,包括时间复杂度为O(an)的指数级以及O(n!)的阶乘级,这类非多项式算法在进行求解的时候除非数据规模很小否则将花费大量时间和计算资源。

什么是P问题

P问题,是指可以使用多项式算法进行求解的问题,即可以在多项式时间内解决的问题。这里的P是指polynomial–多项式一词的第一个字母。
这类问题一般也被视为可以较快解决的问题,典型代表为排序问题、最小生成树等

什么是NP问题

NP问题不是指non-polynomial (非多项式)问题,而是指Non-deterministic Polynomial problem (非确定性多项式)问题。从概念来说,NP问题是可以在多项式时间内验证解的问题,无法在多项式时间内求得问题的解。
这里的关键在于区别验证和求解,求解意为通过计算直接得出答案, 而验证意为判断这个结果是否满足题意。举个例子,比如说现在需要求解一个最短路径问题,这一问题只能通过枚举的方式来进行求解,时间复杂度很高,但是我可以任意画出一条路径并且很容易验证这条路径是否符合题目要求。这样就符合NP问题的条件,无法在多项式时间内求解但可以验证。

NP问题与P问题的关系

所有的P问题都是NP问题,换句话说,如果在多项式时间内可以得出问题的解,那么在这一时间内一定可以验证问题的解。
但是所有的NP问题是不是都是P问题呢?这一问题一直在被讨论,一般有两个流派。一方认为P=NP,NP问题就是我们尚未找到多项式解法的问题,但是没找到并不代表没有。另一方坚信,P≠NP,这一方也是人们目前普遍的认知,即至少存在一个不能用多项式算法求解的问题。

NPC问题

什么是约化(Reducibility)

约化就是化简、归约,简单来说就是可以将一个问题变成另一个问题,比如说:问题A可以约化为问题B,这句话意思是,使用问题B的方法可以解决问题A,或者说问题A可以变成问题B。以一元二次方程和一元一次方程为例,当对一元一次方程添加一项系数为0的二次项时,就将一元一次方程约化成为一元二次方程,两个方程等价,此时可以使用一元二次方程的解法得出该方程的解。

约化这一过程存在一个内含条件,即问题B的复杂度需要高于或等于问题A的复杂度。还是用刚才的例子解释,一元二次方程的算法复杂度显然是比一元一次方程高。

同时,约化还存在传递性。即,当问题A可以约化为问题B,问题B可以约化为问题C时,问题A一定可以约化为问题C。在刚才的例子中,一元三次方程可以当做问题C。

什么是NPC问题

NPC问题中的C意为complete(完全),它的定义基于两个条件。首先,它需要是一个NP问题;其次,所有的NP问题都可以约化成它。

NP-hard问题

NP-hard类问题满足NPC问题的第二条,但不一定满足第一条。也就是说,所有NP问题可以约化成NP-hard问题,但是这一问题本身可能不属于NP问题。NP-hard问题不一定是NP问题,因此就算NPC问题发现了多项式算法也不一定能解决相应的NP-hard问题。

总结

P-problem:能使用多项式算法解决的问题
NP-problem:不能使用多项式算法求解,但是可以在多项式时间内验证问题
NPC-problem:所有的NP问题都能够约化为它,解决了此问题就意味着解决了所有NP问题
NP-hard:所有的NP问题都能够约化为这一问题,但是这一问题本身不一定是NP问题
四者关系如下图所示:

P、NP、NPC 问题解释相关推荐

  1. P NP NPC NP-hard以及多项式时间

    @[TOC]P NP NPC NP-hard以及多项式时间 P NP NPC NP-hard以及多项式时间 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页.如果你想学习如何使用Mar ...

  2. npc一定不能多项式时间内解决吗_P, NP, NPC 和 NPhard

    1. P问题 P问题: 能在多项式时间内解决的问题 考虑时间复杂度​,P问题的时间复杂度总是可以用多项式表示,或小于某多项式表示的. 例如冒泡排序算法,时间复杂度为​ ,显然是多项式时间内可以解决的问 ...

  3. P,NP,NPC,NP-Hard,co-NP问题辨析

    学算法学到这章,真是神仙打架.上网学习各位前辈的文章,看的我也是眼花缭乱.终于看到一篇易于理解的(网址附于文末),看过之后写写自己的理解.如有错误,请各位前辈指正! P问题,在这里不说全称了,感觉说了 ...

  4. p,np,npc,np难问题,确定图灵机与非确定图灵机

    本文转自豆瓣_燃烧的影子 图灵机与可计算性 图灵(1912~1954)出生于英国伦敦,19岁进入剑桥皇家学院研究量子力学和数理逻辑.1935年,图灵写出了"论高斯误差函数"的论文, ...

  5. 时间复杂度 P/NP/NPC

    你会经常看到网上出现"这怎么做,这不是NP问题吗"."这个只有搜了,这已经被证明是NP问题了"之类的话.你要知道,大多数人此时所说的NP问题其实都是指的NPC问 ...

  6. NP,NPC,NPH,强NPC问题

    图和部分内容转自http://www.cnblogs.com/jpcflyer/archive/2012/04/15/2450622.html 一.相关概念 P: 能在多项式时间内解决的问题 NP: ...

  7. P NP NPC(1)(转载)

    要计算或解决一个问题,该问题通常有一个大小规模,用n表示.例如,若分析计算一个二进制数,该数有多少位,这个位就是其大小规模.再比如,从n个数里面找出最大的那个数,这个n就是该问题的规模大小.怎么找?我 ...

  8. P问题、NP问题、NPC问题的概念及实例证明

    美剧<基本演绎法>(也就是美版"福尔摩斯")第 2 季第 2 集中,两位研究 NP 问题的数学家被谋杀了,凶手是同行,因为被害者即将证明"P=NP 问题&qu ...

  9. P、NP、NPC和NP-Hard相关概念

    P.NP.NPC和NP-Hard相关概念的图形和解释 一.相关概念 P: 能在多项式时间内解决的问题 NP: 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时间验证的问题 NPC ...

最新文章

  1. 回字有四种写法,那你知道单例有五种写法吗
  2. Redis和Memcache的区别总结
  3. CXF+Spring+Tomcat简明示例
  4. android studio启动停止命令,那些停止Android Studio任务的方法(不断整理中)
  5. 常数中有换行符的错误
  6. python封装概念_Python封装及解构
  7. 前端开发下划线怎么设置_怎么使用Word快速制作填空题下划线? 只须一个快捷键, 教师必备...
  8. 这个寒假要大更新了!
  9. ipset-linux防火墙的扩展实现对指定ip的限制访问
  10. 新浪第一时间视频直播全球火炬接力
  11. maven不引入parent_Maven从入门到放弃
  12. MySQL Workbench 使用 (3):数据库备份与恢复
  13. 华为 IP源防攻击和MAC认证
  14. 罗辑回归,Logistic Regression(or sigmoid function)
  15. 在项目中使用iconfont图标(在线使用)
  16. HMS-广告服务(Banner广告)
  17. strom及DRPC性能测试与改进
  18. 400个可以发外链的网站
  19. 分享我的Android蓝牙开源作品—HBluetooth
  20. UEditor整合代码高亮插件SyntaxHighlighter

热门文章

  1. 阿里巴巴全套人力资源管理资料(绩效考核+企业文化+人力资源+招聘面试+培训+员工关系+薪酬福利,共129份,230M)
  2. 原地(原址、就地)排序和稳定排序
  3. todoList案例(vue版本)之编辑todo(vuex实现)
  4. c 服务器和android客户端,通过TCP与c + +(套接字服务器)conect android(套接字客户端)...
  5. 水平居中,垂直居中,水平垂直居中(常用方法)
  6. python语言基础项目报告书_Python语言基础01-初识Python
  7. 服务器打开 显示屏不显示,服务器显示屏不显示
  8. grad_cam CNN可视化
  9. 在chrom浏览器中仅用键盘快速打开书签页的方式
  10. Excel文件管理插件——方便好用的Excel小帮手