第七章-P类问题、NP类问题、NP-hard问题以及NP-complete问题

一.多项式时间

时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。时间复杂度一般分为两种级别:一种是 O(1) , O(log(n)) , O(na) 等,我们把它叫做多项式级的复杂度,因为它的规模n出现在底数的位置;另一种是 O(an)O(n!) 型复杂度,它是非多项式级的,其复杂度计算机往往不能承受。当我们在解决一个问题时,我们选择的算法通常都需要是多项式级的复杂度,非多项式级的复杂度需要的时间太多,往往会超时,除非是数据规模非常小。

时间复杂度 复杂度类别
O(n) 多项式级的复杂度
O(log(n)) 多项式级的复杂度
O(na) 多项式级的复杂度
O(an) 指数级复杂度
O(n!) 阶乘级复杂度

二.P类问题、NP类问题

P类问题即为所有可以由一个确定型图灵机在多项式表达的时间内解决的问题;NP类问题由所有可以在多项式时间内验证它的解是否正确的决定问题组成,或者等效的说,那些可以在非确定型图灵机上在多项式时间内找出解的问题的集合。很可能,计算理论最大的未解决问题就是关于这两类的关系的。----------------上述内容摘自维基百科

  • P类问题:所有可在多项式时间内用确定算法求解的判定问题的集合
  • NP类问题:所有可在多项式时间内用不确定算法求解的判定问题的集合,也就是说一个问题的解可以在多项式的时间内被验证

三.NP-hard问题

对于问题Q以及任意的NP类问题Q1 ∈ \in NP,都有Q1可以归约到Q,那么Q是NP-hard问题

  • 任意np问题都可以在多项式时间内归约为该问题。归约的意思是为了解决问题A,先将问题A归约为另一个问题B,解决问题B同时也间接解决了问题A。

四.NP-complete问题

对于问题NP类问题Q并且该问题Q是NP-hard,那么Q是NP-complete问题

换言之,NP-complete问题同时具有以下两个特点:

  1. 它是NP类问题
  2. 同时它也是NP-hard类问题;

五.相互关系

显然,所有P问题都是NP问题,反之则不一定。NP-complete问题是NP问题的子集,也是P问题和NP问题的差异所在。如果找到一个多项式内能被解决的NP-complete问题的解决方法,那么P=NP

第七章-P类问题、NP类问题、NP-hard问题以及NP-complete问题_第1张图片

六.写在最后

本文是题主主要研究算法博弈论,看到该部分内容的时候,觉得收获颇多。故再次将其展示与博客,为了让大家更多的了解博弈论的真面目,另外一方面也会在后来做该方面工作的时候可以继续去补充,希望能和大家共勉,一起去贡献出更精彩的博客!

注:文章内容引用列表:

  1. 维基百科:https://zh.wikipedia.org/wiki/P/NP问题
  2. 知乎:怎么理解 P 问题和 NP 问题 .
  3. 卡普的21个NP完全问题-问题描述.

你可能感兴趣的:(Java算法设计,群智感知与边缘计算)