其他分享
首页 > 其他分享> > 0-1背包问题

0-1背包问题

作者:互联网

1. 

 

 

2. 解析

价值密度pi/wi 贪婪算法,这种选择准则为:从剩余物品中选择可装入包的pi/wi值最大的物品。

思路:轻者先装,直到再装任何集装箱将使轮船载重量超过 C 时停止。

定理:对于任何正整数 k, 算法 (轻者先装)对 k 个集装箱的实例得到

最优解。

证明(数学归纳法):

(1)k=1,集装箱个数为1且重量小于c,任何装法都只有一种方式,因此都是最优解,因此轻者先装也是最优解。

(2)归纳假设:假设算法对于规模为 k 的输入都能得到最优解。

则对于k+1的输入,

通过拿掉最轻的集装箱能够得到规模为k的输入

根据归纳假设,对于 k 个输入,N’、W’、C’的最优解为 I’,即 I’为 N’的最优解(归纳假设得)

 

令 ,那么I必然是N的最优解,这也是算法对于 N,W,C 的解。

证明:I 必然是 N 的最优解,采用反证法,即假设I不是 N的最优解。

(1)构建最优解 I*(N):假设 I 不是 N 的最优解。则必然存在最优解 I*,如果I中没有1,用 1 替代 I中的第一个集装箱标号得到的解也是最优解(个数不变,因此也是最优解),使得 I为N 的最优解,

且|I|>|I|。

(2) 构建最优解 I*’(N’):因为 I为N的最优解,构建的I’=I*-{1}是N不包含 1 的最优解(待证明),即关于 N’、W’、C’的最优解。

 

证明:I*’=I*-{1}是N不包含 1 的最优解。

证(反证法):如果 I*’=I*-{1}不是不包含 1 的最优解,那么存在最优解 I*’’ ( N’,不含 1),使得|I*’|<|I*’’|,

即|I*’+{1}|<|I*’’ +{1}|,与 I*’+{1}= I为最优矛盾,因此 I’=I*-{1}是不包含 1 的最优解。

 

(3)构建的最优解 I*’与归纳假设的最优解 I’比较:由(1)|I*|>|I|得,| I*’|= ,与 I’的最优性矛盾(最优解 I*- {1}大于最优解 I’)。

3. 设计

对pw[i]=p[i]/w[i]降序

For i to n //n是物品数量

装入,-w[i],+v[i],x[i]=1

4. 分析

T(n)=O(nlogn)

5. 源码

https://github.com/2579081436/algorithm.github.io

标签:背包,归纳,假设,问题,算法,集装箱,最优,先装
来源: https://www.cnblogs.com/-happy-/p/14800350.html