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

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

  • Approximation Schemes(近似方案)
    • PTAS(Polynomial time approximation scheme)
      • 定义:
  • FPTAS(Fully polynomial time approximation scheme)
      • 定义:
    • PPTAS(Pseudo-polynomial time approximation scheme)
      • 定义:
  • 伪多项式时间 0-1背包问题
    • 问题描述
    • 近似算法解法
    • 证明

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背包问题的近似算法_第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张图片

【近似算法】—0-1背包问题的近似算法_第3张图片

0-1背包问题近似算法

你可能感兴趣的:(算法,笔记,算法,背包问题,近似算法)