第8章贪心算法-分数背包问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

贪心算法:

算法GREEDY_KANPSACK

输入:表示背包容量的实数C,物品数n,表示n个物品的体积和价值的实数数组s[1..n]和v[1..n]。

输出:装入背包物品的最大总价值maxv和相应的最优解x[1..n]。

for i=1 to n

y[i]=v[i]/s[i]//求n个物品的单位体积价值y[1..n]。

end for

//对y[1..n]按降序地址排序,排序结果返回到数组d[1..n]//中,使得

y[d[1]]>=y[d[2]]>=…>=y[d[n]]。

d=sort(y, n)

for i=1 to nx[i]=0//对x[1..n]初始化。

i=1;maxv=0;rc=C//以下rc表示当前背包的剩余容量。

while rc>0 and i<=n

j=d[i]// u

j为当前考虑选择的物品

if s[j]<=rc then

x[j]=1;rc=rc-s[j]//物品u

j全部装入背包。else

x[j]=rc/s[j]//选择物品u

j的一部分将背包填满。

rc=0

end if

maxv=maxv+v[j]*x[j]

i=i+1

end while

return maxv, x[1..n]

end GREEDY_KNAPSACK

●算法的时间复杂性:Θ(nlogn)

间)

思考:0/1背包问题可否用贪心法解?(主要为排序的时

相关文档
最新文档