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. Mac的移动硬盘不能装载该如何解决?
  2. asp.net MVC 路由
  3. golang设置默认地区
  4. [Apple开发者帐户帮助]二、管理你的团队(6)找到您的团队ID
  5. mysql同时查出符合条件数据与总数
  6. mysql open table_MySQL open table
  7. HTML5 API详解(4):最实用的API DeviceOrientation设备传感器
  8. c java python go 哪种编程语言接近编程的本质_一图看懂编程语言迁移模式:终点站是Python、Go、JS...
  9. 设计模式(三)结构型模式
  10. charts 画折线图
  11. 成品app直播源码,fragment切换 常用写法
  12. Android中 Bitmap转JPG PNG
  13. Dagger2简单使用
  14. 我花了一夜用数据结构给女朋友写个H5走迷宫游戏
  15. windows下对python的pip更新到最新版本
  16. Powershell 免杀过 defender 火绒,附自动化工具
  17. 梦网模式下的sp生存
  18. java设计模式实战-(反射+策略模式)
  19. 敏感词加解密与隐位处理
  20. 说一个恐怖故事:我的另一半是程序员!惊了~

热门文章

  1. QQ群成员号码采集Chrome浏览器插件
  2. 画论72 范玑《过云庐论画》
  3. 富兰克林是如何发现电的自然属性的?
  4. 【python基础】断点调试pdb模块简易使用
  5. Medici三维数据提取
  6. Android Arcgis 优化--------道格拉斯-普克抽稀算法
  7. 苹果手机数据线充不了电_苹果手机充不进去电怎么办?终于找到原因了!
  8. Java集合Map,set, list 之间的转换
  9. list与set互转 java
  10. 我和X-Plane 11首席程序员谈API设计