算法导论【近似算法】—0-1背包问题的近似算法

40 篇文章 6 订阅

Approximation Schemes(近似方案)

PTAS(Polynomial time approximation scheme)

定义:

若对于每一个固定的 ϵ > 0 ϵ > 0 ϵ>0 ,算法 A 的运行时间以实例 I I I的规模的多项式为上界,则称 A 是一个多项时间近似方案。

FPTAS(Fully polynomial time approximation scheme)

定义:

在 PTAS 的基础上,进一步要求算法 A 的运行时间以实例 I I I的规模和 1 / ϵ 1 / ϵ 1/ϵ 的多项式为上界,则称 A 是一个完全多项时间近似方案。FPTAS 被认为是最值得研究的近似算法,仅有极少数的 NP-hard 问题存在 FPTAS。

PPTAS(Pseudo-polynomial time approximation scheme)

定义:

如果算法的时间复杂度可以表示为输入数值规模 N 的多项式,但是运行时间与输入值规模 N 的二进制位数呈指数增长关系,则称其时间复杂度为伪多项式时间。一个具有伪多项式时间复杂度的NP完全问题称之为弱NP完全问题,而在 P!=NP 的情况下,若一个NP完全问题被证明没有伪多项式时间复杂度的解,则称之为强NP完全问题。

伪多项式时间 0-1背包问题

在这里插入图片描述

  • 如果数值算法的运行时间是输入数值的多项式,但不一定是输入长度的多项式(表示它所需的位数),则该算法在伪多项式时间内运行
  • 0-1背包问题的动态规划算法的运行时间为 O ( W ∗ n ) O(W*n) O(Wn) W W W需要 log ⁡ W \log W logW位来描述,因此它是伪多项式。
  • 其他伪多项式算法:原始性测试

问题描述

  • 设P为最大利润,即 P = m a x a ∈ S P ( a ) P=max_{a∈S}P(a) P=maxaSP(a)。由此,对于 n n n个对象,我们最多获取 n P nP nP的利润上限。在这里,我们可以假设每一项的好处都是内在价值。
  • 对于每个 i ∈ { 1 , … , n } i∈\{1,…,n\} i{1n} p ∈ { 1 , … … , n P } p∈\{1,……,nP\} p{1……nP},设 S i , p S_{i,p} Si,p表示总利润恰好为 p p p { a 1 , … , a i } \{a_1,…,a_i\} {a1ai}的子集,并且占用尽可能少的空间
  • A ( i , p ) A(i,p) A(ip)是集合 S i , p S_{i,p} Si,p的大小,其值为 ∞ ∞ ,表示没有这样的子集。
  • 对于 A ( i , p ) A(i,p) A(ip),我们有基本情况 A ( 1 , p ) A(1,p) A(1p)其中 A ( 1 , p ( a 1 ) ) A(1,p(a_1)) A(1,p(a1)) s ( a 1 ) s(a1) s(a1),所有其他值都是 ∞ ∞

近似算法解法

递归式:
在这里插入图片描述

  • 然后,最优子集对应于集合 S n , p S_{n,p} Sn,p,其中 p p p最大且 A ( n , p ) ≤ B A(n,p)≤B A(n,p)B。由于这最多迭代 n n n个不同的值来计算每个 A ( i , p ) A(i,p) A(i,p),我们得到了 O ( n 2 P ) O(n ^2P) O(n2P)的总运行时间,因此得到了背包的伪多项式算法
  • 很容易修改上述DP算法以实现0-1背包的全多项式时间逼近方案(FPTAS)
  • D P   F O R   K N A P S A C K ( ) DP\ FOR\ KNAPSACK() DP FOR KNAPSACK()
    1:Let P be the maximum benefit of all items
    2:Given ε > 0 ε>0 ε>0,let K = ε ⋅ P / n K=ε·P/n K=εP/n
    3:for each object a i a_i ai do
    4:define a new profit p ′ ( a i ) = ⌊ p ( a i ) K ⌋ p'(a_i)=⌊\cfrac{p(a_i)}{K}⌋ p(ai)=Kp(ai)
    5:将这些 p ′ ( a i ) p'(a_i) p(ai)作为n个项目的利润,使用动态规划算法,找到最大利润的集合 S ′ S' S
    6:输出 S ′ S' S作为原始背包问题的最终解
  • 定理:由上述算法输出的集合S′满足:
    • P ( S ′ ) ≥ ( 1 − ε ) ⋅ O P T P(S')≥(1-ε)·OPT P(S)(1ε)OPT。这里 P ( S ′ ) P(S') P(S)表示集合 S ′ S' S的利润(或收益),OPT是原始问题的最佳收益

证明

在这里插入图片描述

在这里插入图片描述

0-1背包问题近似算法

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

之墨_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值