P、NP、NPC、NP-hard 问题及组合最优化问题的认识和理解

版权声明:转载请联系邮箱[email protected] https://blog.csdn.net/weixin_42528077/article/details/82779896

P、NP、NPC和NP-hard 问题

算法的时间复杂度

时间复杂度是指在 问题的规模扩大之后,程序求解所需要的时间增长的有多快

示例:
如果无论数据有多大,时间总是那么多,则称常数级复杂度,O(1)
若数据规模变多大,程序花费的时间变多长,即 O(n);若数据变大2倍,时间变长4倍,即 O(n^2);这些属于多项式时间复杂度,如找最大值,冒泡排序…
形如 O(a^n), O(n!) 等时间复杂度属于指数型时间复杂度,需要的时间太多计算机往往不能承受。

会不会所有的问题都可以找到复杂度为多项式级的算法呢?

并不是。有些问题只能找到指数型时间复杂度的算法,比如Hamilton回路问题;也有找不出正确算法的问题,如Halting问题,称为 不可解问题。

问题的分类:

  • P类问题:可以找到一个多项式时间复杂度的算法去解决的问题;
  • NP类问题:可以在多项式时间复杂度的算法去验证结果正确性的问题;比如随便拿一个结果,可在多项式时间内验证该结果是否正确,但是想要求解该结果的时间复杂度就不知道了。P类问题一定是NP类问题,但是NP类问题不一定能找到多项式时间复杂度的算法来解决(要是找到了就是P问题了)。所以人们关心的是:是否所有的NP问题都是P问题,即是否有 P=NP(信息学的巅峰问题)

目前为止这个问题还“啃不动”。但是,一个总的趋势是人们普遍认为,P=NP不成立,也就是说,多数人相信,存在至少一个不可能有多项式级复杂度的算法的NP问题。人们如此坚信P≠NP是有原因的,就是在研究NP问题的过程中找出了一类非常特殊的NP问题叫做NP-完全问题,也即所谓的 NPC问题。

  • 其他:找不到在多项式时间复杂度的算法去验证结果的问题(不讨论)

“约化”的概念

  • 问题A可以约化为问题B:可以采用解决问题B的方法解决问题A;或者说,问题A可以转化为问题B。(如:一元二次方程的解法可以用来解一元一次方程,只要令二次项系数a=0即可)
  • 问题A可以约化为问题B 的直观意义:B的时间复杂度高于或者等于A的时间复杂度。也就是说,问题A不比问题B难。
  • 约化具有传递性:如果问题A可约化为问题B,问题B可约化为问题C,则问题A一定可约化为问题C。
  • 约化的标准概念:如果能找到这样一个变化法则(要求该变化法则为至多多项式时间复杂度),对任意一个程序A的输入,都能按这个法则变换成程序B的输入,使两程序的输出相同,那么我们说,问题A可约化为问题B。

NP问题和NP-完全问题(NPC问题)

一个问题约化为另一个问题,时间复杂度增加了,问题的应用范围也增大了。通过对某些问题的不断约化,我们能够不断寻找复杂度更高,但应用范围更广的算法来代替复杂度虽然低,但只能用于很小的一类问题的算法。

如果从某一个NP问题开始不断向上约化,不断找到能“通吃”若干小NP问题的一个稍复杂的大NP问题,那么最后是否有可能找到一个时间复杂度最高,并且能“通吃”所有的 NP问题的这样一个超级NP问题?

  • NPC问题:存在这样一个NP问题,所有的NP问题都可以约化成它。这种问题不只一个,它有很多个,它是一类问题。这一类问题就是NPC 问题。

  • NPC问题的定义:同时满足下面两个条件的问题就是NPC问题:首先,它得是一个NP问题;然后,所有的NP问题都可以约化到它。

NPC问题的证明:先证明它至少是一个NP问题,再证明其中一个已知的NPC问题能约化到它(由约化的传递性,则NPC问题定义的第二条也得以满足)

NP-hard问题:

NP-hard问题满足NPC问题定义的第二条而不满足第一条。NP-hard问题的范围比NP问题要广。

NP-hard问题同样难以找到多项式时间复杂度的算法,但它也不一定是NP问题(只是所有的NP问题都可以约化到它)。

组合最优化问题

组合最优化问题(combinatorial optimizationproblem)是一类在离散状态下求极值的问题。把某种离散对象按某个确定的约束条件进行安排,当已知合乎这种约束条件的特定安排存在时,寻求这种特定安排在某个优化准则下的极大解或极小解的间题。

组合最优化的理论基础含线性规划、非线性规划、整数规划、动态规划、拟阵论和网络分析等。组合最优化技术提供了一个快速寻求极大解或极小解的方法。

组合最优化问题的数学模型:

  m i n f ( x ) \ min f(x)
s . t . g ( x ) 0 s.t. g(x) \geq 0
  x D \ x \in D

其中, f ( x ) f(x) 为目标函数, g ( x ) g(x) 为约束函数, x x 为决策变量, D D 表示有限个点组成的集合。

一个组合最优化问题可以用三个参数 ( D , F , f ) (D,F,f) 来表示,其中 D D 表示决策变量的定义域, F F 表示可行解区域,

F中的任意一个元素为该问题的可行解, f f 表示目标函数,满足使 f ( x ) f(x) 值取到最小值的可行解区域中的 x x^{*} 称为该问题的最优解。

组合最优化的特点

多数问题属于所谓的NP完全问题,即对该问题基本上不存在一种算法,使得当所有的具体问题的变量和约束条件的数目两者之和甚大时,可以在容许时间(即所谓的多项式时间)之内给出所要的解。

由于这类问题在生产实际中经常出现,不能予以忽视,于是出现了两类解决问题的途径:一类是所谓的直观算法,另一类是近似算法。随着组合最优化研究的进展,一些数学分支,如组合数学、拟阵和广义拟阵以及图论等,也相应地得到新的发展。

猜你喜欢

转载自blog.csdn.net/weixin_42528077/article/details/82779896