求解背包问题的一种新的近似算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
求解背包问题的一种新的近似算法
引言:现实中有很多问题至今还没有多项式式时间可解的算法,如本文的背包问题。
实际应用中可以通过近似算法来获得一个解。
近似算法在理想情况下,可以保证近似解与最优解只有一个常数之差。
背包问题的近似算法
现实中有很多问题至今还没有多项式式时间可解的算法,如本文的背包问题。
实际应用中可以通过近似算法来获得一个解。
近似算法在理想情况下,可以保证近似解与最优解只有一个常数之差。
近似算法设计的两个基本要求:
算法能在N的多项式时间内完成
算法的近似解满足一定的精度
4.1 近似算法定义
接下来我们来介绍几个定义,来衡量近似算法的性能。
定义1(近似比)设问题Π是最大化问题,I是问题Π的一个实例:
A是问题Π的一个近似算法,A(I)是用算法对问题Π的实例I求解得到的近似值
OPTA是问题Π的最优算法,OPTA(I)是算法OPTA对问题Π的实例I求解得到的准确值
则可以定义近似算法A的近似比率ρ(I):
ρ(I)=OPTA(I)A(I)
最小化问题的近似比为:
ρ(I)=A(I)OPTA(I)
算法A的近似比率ρ(I)总是大于等于1,近似比率越小,算法越好。
定义2(相对误差界) 若对于输入规模为n的问题,存在一个函数ϵ(n),使得:
ρ(I)=|OPTA(I)−A(I)OPTA(I)|≤ϵ(n)
近似算法的近似比率ρ(I)与相对误差的界ϵ(n)存在如下的关系:ϵ(n)=ρ(I)−1
定义3(优化问题近似方案)把近似算法A的近似比满足如下条件:
且{Aϵ|ϵ>0且ρ(I,ϵ)≤1+ϵ}
称为优化问题的近似方案。
定义4(多项式近似方案,PAS)如果近似方案中的每一个算法Aϵ,以输入实例规模的多项式时间运行,则称该方案为多项式近似方案(Polynomial Approximiation Scheme ,PAS )
定义5(完全多项式近似方案,FPAS)如果近似方案中的每一个算法Aϵ的计算时间是1ϵ和n的多项式,则称这个近似方案是完全多项式近似方案(Fully Polynomial Approximiation Scheme ,FPAS )
完全多项式近似方案(FPAS)通俗理解,在理想情况下,若ϵ减少某个常数倍,近似方案中算法的计算时间的增长也不会超过某个常数倍。
4.2 背包问题
4.2.1 分数型背包问题
定义4(分数型背包问题)设背包的容量为W,给定n个物品{1,...,n},物品对应的体积为w1,...,wn,物品对应的价值为c1,...,cn。
物品可以分割,选取n个物品中的子集S⊆{1,...,n}装入背包,使得物品价值最大。
其最优化表述为:
(16)max∑j=1ncjxjs.t.∑j=1nwjxj≤W0≤xj≤1
接下来我们讨论分数型背包问题的贪婪法求解。
我们按价值体积比从大到小排序:
c1w1≥c2w2,...,≥cnwn
定义k为刚好使背包超过容量W的那个物品:
k:=min{j∈{1,..,n}:∑i=1jwi>W}
则分数型背包问题的最优解由下面式子给出:
其中其中xj:=1,其中j=1,...,k−1xk:=W−∑j=1k−1wjwkxj:=0,其中j=k+1,...,n
上述分数型背包问题主要的计算时间在于对n个物品排序,排序的复杂度为o(nlog(n))。
4.2.2 0-1背包问题的贪婪算法
定义5(0-1背包问题)设背包的容量为W,给定n个物品{1,...,n},物品对应的体积为w1,...,wn,物品对应的价值为c1,...,cn。
物品不可分割,选取n个物品中的子集S⊆{1,...,n}装入背包,使得物品价值最大。
其最优化表述为:
(17)max∑j=1ncjxjs.t.∑j=1nwjxj≤Wxj∈{0,1}
我们按价值体积比从大到小排序:
c1w1≥c2w2,...,≥cnwn
定义k为刚好使背包超过容量W的那个物品:
k:=min{j∈{1,..,n}:∑i=1jwi>W}
则0-1背包问题的可行解{1,...,k−1}作为近似解;实际上,该贪婪算法可以任意的坏,即其近似比可能是无界的。
例如,考虑如下背包问题:
物品1: w1=1,c1=2
物品2:w2=C,c2=C,C>2
最优解是把物品2装入背包,但是按照贪婪法,则优先把物品1装入背包。
考虑到C可以任意大,近似比也任意大。
上述算法主要的计算时间在于对n个物品排序,排序的复杂度为o(nlog(n))。
4.2.3 0-1背包问题的动态规划算法
我们先定义n个物品的价值总和:
C=∑i=1nci
我们在这里直接给出0-1背包问题的动态规划算法的递归方程: dp(i,0)=0,dp(0,j)=0dp(i,j)={dp(i−1,j)j<wimax(dp(i−1,j),dp(i −1,j−wi)+cj)j≥wi
最优解由dp(n,C)给出。
上述0-1背包问题的动态规划算法的时间复杂度为o(nC)。
4.2.4 0-1背包问题的完全多项式近似方案
实际上我们把0-1背包问题的贪婪算法,进行简单的修改,就可以使其近似比接近于2:
步骤1:按照正常的贪婪法求解,得到一个解,设其价值为Cr;
步骤2:挑选价值最大的物品装入背包,设其价值为Cs;
步骤3:选择Cr、Cs两者最大的作为算法的输出。
上述算法主要的计算时间在于对n个物品排序,排序的复杂度为o(nlog(n))。