组合优化中的P问题,NP问题,NP-complete问题和NP-hard问题

组合优化问题

组合优化是通过数学方法的研究去寻找离散事件的最优编排、分组、排序和筛选等,是运筹学中一个经典且重要的分支。对于一个极小化问题,问题描述如下式:
m i n f ( x ) s . t . g ( x ) ≥ 0 x ∈ D min\quad f(x) \\ s.t. \quad g(x) \geq 0 \\ \quad x \in D minf(x)s.t.g(x)0xD
f(x)是目标函数, g(x)是约束函数, x是可行解,D是包含有限个或无限个解的离散集合。所谓组合优化是指在离散的有限数学结构中寻找一个(或一组)满足给定约束条件并使目标函数值达到最小的解。因为现实生活里的大量优化问题是从有限个状态中选取最好的,所以大量的实际优化问题是组合优化问题。

计算复杂性

分析上面的定义,我们可以发现如果D是有限集合, 理论上只要遍历所有解空间,就能找到最优解。然而随着问题规模的扩大,D中解的个数会迅速增大,想要遍历所有整个解空间,几乎是不可能的。一般来说,组合优化问题通常带有大量局部极值点,往往是不可微、不可导、不连续、多维、多约束、高度非线性的NP问题。以旅行商问题为例:对于有n个城市的旅行商问题,所有可行路径有 ( n − 1 ) ! 2 \frac{(n-1)!}{2} 2(n1)!,若以路径比较为基本操作,则需要 ( n − 1 ) ! 2 − 1 \frac{(n-1)!}{2} - 1 2(n1)!1次基本操作才能保证找到最优解。对于每秒执行一百万次操作的计算机,当n=20时,需要1929年才能找到最优解。鉴于许多问题的求解复杂性远远大于旅行商问题,所以我们必须对计算复杂性理论有所了解,这也是最优化的理论基础。

算法或问题的复杂性一般表示为问题规模n的函数,时间复杂性记为T(n), 空间复杂性记为S(n)。在算法分析和设计中,沿用实用性的复杂性概念,即把求解问题的关键操作(加减乘,比较等运算)指定为基本操作,而把算法执行基本操作的次数定义为算法的时间复杂性,算法执行期间占用的存储单元则定义为算法的空间复杂性。在分析复杂度时,可求出算法的复杂性函数p(n),也可以用复杂性函数主要项的阶O(p(n))来表示。若算法A的时间复杂性为T(n)=O(p(n)),且p(n)为n的多项式函数,则称A为多项式算法,而把时间复杂度大于多项式时间的算法统统称为指数时间算法。

P类问题是具有多项式时间求解算法的问题类。但是迄今为止,许多优化问题没有找到求最优解的多项式时间算法。通常称比P类问题更广泛的问题为不确定多项式(Non-determinstic Polynomial, NP)问题,即NP问题。NP的概念可以由判定问题引入。

定义1:实例是问题的特殊表现,所谓实例就是确定了描述问题特性所有参数的问题,其中参数值称为数据,这些数据占用计算机的空间称为示例的输入长度。

定义2: 若一个问题的每个实例只有“是”与“否”两种答案,则称该问题为判定问题,并称肯定回答的实例为“是”实例,否定回答的实例为“否”实例。

定义3:若存在一个多项式函数p(x)和一个验证算法H, 对一类判定问题A的任何一个“是”的判定实例I都存在一个字符串S,S是I的“是”回答,满足其输入长度L(s)不超过p(L(I)),其中L(I)是I的输入长度,且验证算法验证S为I的“是”回答的计算时间不超过p(L(I)),则称判定问题A为NP问题。
【假使你得到了问题的解,我要验证你的解是否正确,我验证所花的时间是多项式,至于求解本身所花的时间是否是多项式我不管,可能有多项式算法,可能没有,也可能是不知道,这样的问题称为NP】

由此可见,判定问题是否输入NP的关键是对“是”的判定实例是否存在满足上述条件的一个字符串和算法,其中字符串可以理解为问题的一个解,而定义中没有强调字符串和算法是如何得到的。有上述定义可见 P ⊂ N P P\subset NP P

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值