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

Posted 之墨_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了近似算法—0-1背包问题的近似算法相关的知识,希望对你有一定的参考价值。

【近似算法】—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背包问题的动态规划算法的运行时间为 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∈SP(a) P=maxaSP(a)。由此,对于 n n n个对象,我们最多获取 n P nP nP的利润上限。在这里,我们可以假设每一项的好处都是内在价值。
  • 对于每个 i ∈ 1 , … , n i∈\\1,…,n\\ i1n p ∈ 1 , … … , n P p∈\\1,……,nP\\ p1……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)=⌊\\cfracp(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背包问题近似算法

以上是关于近似算法—0-1背包问题的近似算法的主要内容,如果未能解决你的问题,请参考以下文章

背包问题基于matlab带权重的贪心萤火虫算法求解0-1背包问题含Matlab源码 045期

背包问题基于matlab带权重的贪心萤火虫算法求解0-1背包问题含Matlab源码 045期

随机算法与近似算法

贪心算法_01背包问题_Java实现

算法图解-贪婪算法

动态规划图