问题背景

若某NPH问题q有多项式时间算法,则任一NP问题皆可多项式时间归约到q,故任一NP问题也是多项式时间可解的,由此可得NP=P. 传统时间复杂度中n表示数据输入的规模,如排序中n表示被排序的数据元素个数。但这不够严谨,其标准化的定义应该是:一个问题的输入规模是保存输入数据所需要的位数(bit),在此基础上定义的时间复杂度是标准的时间复杂度。
若一个算法的传统时间复杂度是多项式时间而其标准的时间复杂度不是多项式时间的,则该算法是伪多项式时间的。(例如朴素的素数判定算法), 一个具有伪多项式时间复杂度的NPC问题称为弱NPC问题,否则为强NPC问题

现实中许多优化问题是NP-hard的,由复杂性理论知:若P≠NP(并且很可能为真),就不可能找到多项式时间的算法来对问题的所有输入实例求出最优解。但若放松要求,就可能存在有效求解算法。
1.超多项式时间启发
不再要求多项式时间算法,有时求解问题存在超多项式时间算法,实用中相当快。例如,0/1背包问题是NPC问题,但存在1个伪多项式时间算法很容易解决它. 缺点:该技术只对少数问题有效(弱NPC问题)

2.启发式概率分析
不再要求问题的解满足所有的输入实例。在某些应用中,有可能输入实例的类被严格限制,对这些受限实例易于找到其有效算法。而这种结果往往归功于对输入实例约束的概率模型。缺点:选取一个特殊的输入分布往往是不易的。

3.近似算法
不再要求总是找到最优解。在实际应用中有时很难确定一个最优解和近似最优解(次优解)之间的差别,因问题的输入实例数据本身就可能是近似的。设计一个算法能够求出所有情况下的次优解来解NP-hard问题往往是真正有效的手段。

近似算法基本概念

优化问题近似解分类
1)容易近似
Knapsack,Scheduling,Bin Packing等
2)中等难度
Vertex Cover,Euclidean TSP,Steiner Trees等
3)难于近似 (这类问题即使找到很差的近似解也是NP-hard
Graph Coloring,TSP,Clique等

Def1 一个优化问题∏∏∏由三部分构成:
实例集DDD:输入实例的集合
解集S(I)S(I)S(I):输入实例I∊DI∊DI∊D的所有可行解的集合
解的值函数fff:给每个解赋一个值,f:S(I)→Rf:S(I)→Rf:S(I)→R

Def2 若一个NPH判定问题Π1Π_1Π1​是多项式可归约为计算一个优化问题Π2Π_2Π2​的解,则Π2Π_2Π2​是NPH的 。

Def3 一个近似算法A,是一个多项式时间求解优化问题ΠΠΠ的算法,使得对一个给定的ΠΠΠ的输入实例III,它输出某个解σ∊S(I)σ∊S(I)σ∊S(I)。通常,我们用A(I)A(I)A(I)表示算法A所获得的解的值f(σ)f(σ)f(σ)

近似算法的性能
算法质量(measure of goodness)是在最优解和近似解之间建立某种关系,这种度量也称为性能保证(Performance guarantees)。

最大值优化问题∏∏∏是:
对于给定的I∊D,找一个解σoptI∈S(I)\sigma_{opt}^I \in S(I)σoptI​∈S(I)使得: ∀σ∈S(I),f(σoptI)≥f(σ)\forall \sigma \in S(I), f(\sigma_{opt}^I) \geq f(\sigma)∀σ∈S(I),f(σoptI​)≥f(σ)
可以称为最优解的值OPT(I)≜f(σoptI)O P T(I) \triangleq f\left(\sigma_{o p t}^{I}\right)OPT(I)≜f(σoptI​)

装箱问题(BP)
非形式地,给定一个size在0,1之间的项的集合,要求将其放入单位size的箱子中,使得所用的箱子数目最少。故有最小优化问题:

  1. 实例: I={s1,s2,…,sn}I=\{s_1, s_2, … , s_n\}I={s1​,s2​,…,sn​}, 满足∀i,si∈[0,1]∀i, s_i∈[0,1]∀i,si​∈[0,1]
  2. 解: σ={B1,B2,…,Bk}σ=\{B_1, B_2, … ,B_k\}σ={B1​,B2​,…,Bk​}是 I 的一个不相交的划分,使得∀i,Bi⊂I∀i, B_i⊂I∀i,Bi​⊂I 且∑j∈Bisj≤1\sum_{j \in B_i}s_j \leq 1∑j∈Bi​​sj​≤1 (说明任一箱子中所装的所有物品size之和不超过1
  3. 解的值:使用的箱子数,即f(σ)=│σ│=k

在可行的时间内,求装箱问题的最优解是不可能的,但可求次最优解. 显然,比最优解多使用1个箱子的解是次最优的。一般地,我们希望找到1个近似解,其值与最优解的值相差某一小的常数.

Def4 绝对性能度量: 一个绝对近似算法是优化问题ΠΠΠ的多项式时间近似算法A,使得对某一常数 k>0k>0k>0 满足:∀I∈D,∣A(I)−OPT(I)∣≤k∀I∈D,|A(I)-OPT(I)| ≤ k∀I∈D,∣A(I)−OPT(I)∣≤k. 这里kkk也称为算法A的绝对误差.
(显然, 我们期望对任何NP-hard问题都有一个绝对近似算法,但是对于大多数NP-hard问题,仅当P=NP时,才能找到绝对近似算法(多项式时间), 但是P=NP时近似算法就没用了, 所以绝对近似算法也只能解决部分问题

绝对近似算法

图的顶点着色
使用最少的颜色数来为图G的顶点上色,使得所有相邻的顶点均有不同的颜色,即使G是平面图,该问题的判定版本也是NP-hard的,但它有1个绝对近似算法.

近似算法A(G)A(G)A(G) { // 对任意平面图G染色

  1. 检验G是否可2染色(即判断G是否为二部图), 若是则G可2染色;
  2. 否则, 计算5染色; //可在多项式时间内, 任何平面图G是可5染色的 (实际上四色定理告诉我们G是可4染色的)

} // 这就证明了算法A比最优解多用的颜色数不会超过2

Th1:判定一个平面图是否可3着色的问题是NPC的
Th2:对给定的任意平面图G,近似算法A的性能满足: ∣A(G)−OPT(G)∣≤2|A(G)-OPT(G)| ≤ 2∣A(G)−OPT(G)∣≤2

图的边着色
使用最少的颜色为图的边上色,使得所有相邻的边有不同的颜色
Th3 Vizing定理:任一图至少需要Δ,至多需要Δ+1种颜色为边着色
Vizing定理的证明给出了一个多项式时间的算法A找到Δ+1边着色,但令人惊奇的是边着色问题即使是很特殊的情况也是NP-hard的
Th4 Holyer定理:确定一个3正则平面图所需的边着色数问题是NPH的 (正则图是每个顶点都有相同数目的邻居的图,即每个顶点的度相同。若每个顶点的度均为k,称为 k-正则图。
Th5:近似算法AAA有性能保证:∣A(G)−OPT(G)∣≤1|A(G)-OPT(G)| ≤ 1∣A(G)−OPT(G)∣≤1

小结
这两个例子似乎说明只有很特殊的一类优化问题可能有绝对近似算法:已知最优解的值或值所在的小范围。但最优解的值不易确定时是否有绝对近似算法仍然是未解决的问题.

所以对于研究近似算法的研究者而言, 为了避免做无用功, 在寻找目标问题的绝对近似算法之前, 应该先尝试判断目标绝对近似算法的存在性. 于是引入绝对近似算法的否定问题: 证明问题的绝对近似算法不存在.

0/1背包问题
项 集:I={1,2,…,n}I=\{1,2,…,n\}I={1,2,…,n}
大 小:s1,s2,…,sns_1,s_2,…,s_ns1​,s2​,…,sn​
利 润:p1,p2,…,pnp_1,p_2,…,p_np1​,p2​,…,pn​
背包容量:BBB
问题的一个可行解是子集I’⊆I,∑i∈I′si≤BI’⊆I,\sum_{i \in I'} s_{i} \leq BI’⊆I,∑i∈I′​si​≤B, 问题的最优解是使得f(I′)=∑i∈I′pif\left(\mathbf{I}^{\prime}\right)=\sum_{i \in I^{\prime}} p_{i}f(I′)=∑i∈I′​pi​最大化的可行解

0/1背包问题是NP-hard的,除非存在多项式时间算法能够找到最优解,否则不存在绝对近似算法

Th6 若P≠NPP≠NPP​=NP,则对任何确定的k,找不到近似算法A可解背包问题使得:∣A(I)−OPT(I)∣≤k|A(I)-OPT(I)| ≤ k∣A(I)−OPT(I)∣≤k
证明: 使用扩放法反证。 假定存在算法A具有性能保证k(k是正整数
设 ∀I∊D∀I∊D∀I∊D,可构造新实例I’I’I’使得 si’=si,pi’=(k+1)pi,fori∊[1,n]s_i’=s_i,\ p_i’=(k+1)p_i,\ for \ i∊[1,n]si​’=si​, pi​’=(k+1)pi​, for i∊[1,n]
即:除了利润扩放k+1k+1k+1倍之外,其余参数不变。故III的可行解也是I’I’I’的可行解,反之亦然。只是解的值相差 k+1k+1k+1 倍。
在I’I’I’上运行算法A获得解A(I’)A(I’)A(I’),设A在实例III上的解是σσσ:∣A(I’)−OPT(I’)∣≤k⇒∣(k+1)f(σ)−(k+1)OPT(I)∣≤k⇒∣f(σ)−OPT(I)∣≤k/(k+1)⇒∣f(σ)−OPT(I)∣=0|A(I’)-OPT(I’)| ≤ k ⇒ | (k+1)f(σ)-(k+1)OPT(I)| ≤ k ⇒ |f(σ)-OPT(I)| ≤ k/(k+1) ⇒ |f(σ)-OPT(I)|=0∣A(I’)−OPT(I’)∣≤k⇒∣(k+1)f(σ)−(k+1)OPT(I)∣≤k⇒∣f(σ)−OPT(I)∣≤k/(k+1)⇒∣f(σ)−OPT(I)∣=0
说明我们的绝对近似算法找到了问题的最优解, 那么这个多项式时间算法解决了NPH问题, 则P=NPP = NPP=NP与前提矛盾, 所以不可能存在绝对近似算法求解0/1背包问题, 定理得证.

小结
这里的例子说明在纯组合问题上,依然可用scaling扩放性质, 那么对于非数字问题是否可以继续使用scaling性质, 下面在团问题中讨论

团(Clique)问题
找图G中最大团(最大完全子图),该问题是NP-hard的 (顶点集C被称为无向图 G=(V,E) 的团,如果C是顶点集V的子集(C⊆V),而且任意两个C中的顶点都有边连接。即C中顶点及其连接这些顶点的边构成的子图是完全图 。极大团是指增加任一顶点都不再符合团定义的团,即极大团不能被任何一个更大的团所包含.

最大团是一个图中顶点数最多的团。图G的团数(clique number)ω(G) 是指G中最大团的顶点数。图G的边团覆盖数(edge clique cover number)是指覆盖G中所有的边所需要的最少的团的数目。图G的二分维数(bipartite dimension)是指覆盖G中所有边所需要的最少的二分团的数目,其中二分团(biclique)就是完全二 分子图 。而分团覆盖问题 (Clique cover problem)所关心的是用最少的团去覆盖G中所有的顶点。
独立集(independent set)是刚好和团相反的概念,因为图G中的团和图G的补图中的独立集是一一对应的。

Th7 若P≠NPP≠NPP​=NP,则对于团问题不存在绝对近似算法
定义图的m次幂GmG^mGm:取G的m个拷贝,连接位于不同副本里的任意两顶点
比如下面G2G^2G2是GGG的两份拷贝并且不同拷贝副本之间任意两点连通

可证命题: G中最大团的size为α当且仅当Gm里最大团的size是mα
该命题直接给出了最优解之间的scaling性质:OPT(GK+1)=(k+1)OPT(G)OPT(G^{K+1})=(k+1)OPT(G)OPT(GK+1)=(k+1)OPT(G)

Th7 证明
反证:设G是任意的无向图,近似算法A给出的绝对误差是k。在Gk+1G^{k+1}Gk+1上运行A,若GGG中最大团size为ααα,则我们有 ∣A(Gk+1)−OPT(Gk+1)∣≤k⇒∣A(Gk+1)−(k+1)OPT(G)∣≤k|A(G^{k+1})-OPT(G^{k+1})| ≤ k ⇒ |A(G^{k+1})-(k+1)OPT(G)| ≤ k∣A(Gk+1)−OPT(Gk+1)∣≤k⇒∣A(Gk+1)−(k+1)OPT(G)∣≤k
对于任给的GmG^mGm中体积为βββ的团,易于用多项式时间在GGG中找到一个体积为β/mβ/mβ/m的团。因此我们能够在GGG中找到一个团CCC,使得∣A(Gk+1)−(k+1)OPT(G)∣=∣(k+1)∣C∣−(k+1)OPT(G)∣≤k⇒∣∣C∣−OPT(G)∣≤k/(k+1)|A(G^{k+1})-(k+1)OPT(G)| = | (k+1)|C|-(k+1)OPT(G) | ≤ k \Rightarrow | |C|-OPT(G) | ≤ k/(k+1)∣A(Gk+1)−(k+1)OPT(G)∣=∣(k+1)∣C∣−(k+1)OPT(G)∣≤k⇒∣∣C∣−OPT(G)∣≤k/(k+1)
因为∣C∣|C|∣C∣和OPT(G)OPT(G)OPT(G)均是整数,故A(G)=∣C∣A(G)=|C|A(G)=∣C∣ 是最优团。即:多项式时间内找到了GGG的最优解A(G)A(G)A(G). 则该绝对近似算法是多项式时间可解NPH问题的确定性算法, 则P=NPP = NPP=NP与前提矛盾, 命题得证.

总结

虽然我们渴望得到绝对性能保证,但是较难的优化问题很难找到绝对近似算法。因此,需要放松对“好的近似算法”的要求。所以除了绝对性能度量方法 (对某一常数 k>0k>0k>0 满足:∀I∈D,∣A(I)−OPT(I)∣≤k∀I∈D,|A(I)-OPT(I)| ≤ k∀I∈D,∣A(I)−OPT(I)∣≤k) 之外, 还需要引入相对性能度量, 可见下篇: 多机调度问题

[近似算法] NP-hard 问题求解相关推荐

  1. 科普,什么是“NP难”的问题。专业的解释俺看不懂。这个文章里面举了几个例子,俺一下就明白了。

    NP难问题求解综述 彭茗菁 2008221104210521 [摘要]: 上世纪70年代开始,诞生了一种许多数学家及电子计算器学家所关心的大问题-NP难问题, "P=NP?"这个问 ...

  2. 2-语言与算法-习题

    5由机器语言到高级语言 1 已知程序如下,该程序实现的功能为_____. main() { int i,n; long sum = 0, p = 1; ...//输入n值的语句,略 for(i = 1 ...

  3. 斩获“卡脖子”领域世界冠军!这支华科战队全网刷屏,平均年龄24岁

    转自:量子位 首战即全球冠军,平均年龄仅24岁. 还是在被誉为"芯片之母"的EDA领域获此荣誉. 来自华中科技大学的一支团队全网刷屏了! EDA,也叫做电子设计自动化,是我国&qu ...

  4. 《算法图解》读书笔记

    这是一本很入门的算法书,介绍的东西还算简单明了,大体补充了一些自己没理解的东西. 粗略地看了一下,感觉还是"纸上得来终觉浅,绝知此事要躬行!" <<算法图解>&g ...

  5. 算法导论之NP完全性和近似算法

    NP完全性和近似算法 在理解NP完全性之前,笔者想引入关于科学与伪科学的定义.凡可接受实践检验.可被证实和被否正的为科学,相反之为非科学,而伪科学是非科学之子集,与科学相对立,认定非科学为科学的即是伪 ...

  6. NP完全性理论与近似算法

    一.图灵机 根据有限状态控制器的当前状态及每个读写头读到的带符号,图灵机的一个计算步可实现下面3个操作之一或全部. 改变有限状态控制器中的状态. 清除当前读写头下的方格中原有带符号并写上新的带符号. ...

  7. NP完全问题与近似算法:贪婪策略|Python实现

    1. 集合覆盖问题 假设我们创建了一个自己的电台,希望让整个市区的人都可以听到我们的节目.然而,这个城市有许多不同的广播公司,购买它们服务的电台可以让自己的节目覆盖某一块区域,并且这些区域常常是重叠的 ...

  8. NP难问题以及近似算法(基于次模)

    主要是对自己研究领域的多源定位NP问题转换和证明,以及在别人已经有次模函数的基础上,设计有次模性质的函数,(将想法形式化到次模函数中)效果更好(比如时间.比如效果). 改进思路:    我们首先从一个 ...

  9. 【数据结构和算法设计】算法篇(11) 概率算法和近似算法

    文章目录 12.1 概率算法 12.1.1 什么是概率算法 1. 概率算法的特点 2. 概率算法的分类 3. 随机数生成器 12.1.2 蒙特卡罗类型概率算法 12.1.3 拉斯维加斯类型概率算法 1 ...

最新文章

  1. MXNET学习笔记(二):模型的保存与加载
  2. SpringBoot集成七牛云-实现文件上传、下载、解决报错、详细案例
  3. 如何设置MongoDB快捷启动?
  4. 程序员们之间的“鄙视链”,程序员底之间无声的战争
  5. Linux下JAVA线程占用CPU高的分析方法
  6. android 代码实现back键功能
  7. VMware Data Recovery安装配置
  8. 城市规划图例符号_城市规划图例符号
  9. 关于 librecad 的中文支持
  10. SLAM导航全栈书的正确打开方式(强烈推荐)
  11. linux系统有线网卡,Thinkpad E430+CentOS 6.4+ linux-3.10.12内核网卡驱动(无线+有线)配置...
  12. charing animation
  13. 解方程组的意义和过程 - Strang MIT 18.06 线性代数精髓 2
  14. 服务器网站需要多大硬盘,做网站服务器硬盘多大
  15. 【NVMe2.0b 13】NVMe 标准数据结构
  16. c++ 之 括号匹配(栈)
  17. 基于envoy的分布式网关-contour
  18. IOS开发基础 · SwiftUI · StanfordCS193p Lecture1-2
  19. 软件工程_东师站_课堂笔记
  20. 汽车用户消费投诉数据爬取分析(Python爬虫)

热门文章

  1. 【设计篇】36 # 如何理解可视化设计原则?
  2. 【ceph】ceph OSD状态及常用命令
  3. Mr.Alright---安卓Q Google日历选择提示音报错的解决及解决后的思考
  4. 新零售到底新在哪里了
  5. Android apk打包流程★
  6. 【Web技术】1305- 看完就懂的前端拖拽那些事
  7. 一款好看的新网站发布导航页源码
  8. 时序数据库TDengine基本概念和建模思路
  9. matlab 拟合椭圆
  10. 奔图无线版的打印机_手机端WPS打印文档的操作步骤