背包问题
这是我前段时间在书本上学到的一个算法,借用书本的例子说明一下。代码我自己手打测试成功!
假设一个背包的负重量最多可达8公斤,而希望在背包中装入负重范围内总价最多的物品,假设装入水果的编号、单价、与重量如表
编程找到答案。
编号 | 名称 | 水果 | 单价 |
0 | 李子 | 4kg | NT$4500 |
1 | 苹果 | 5kg | NT$5700 |
2 | 橘子 | 2kg | NT$2250 |
3 | 草莓 | 1kg | NT$1100 |
4 | 甜瓜 | 6kg | NT$6700 |
分析:
背包问题属于最佳化问题,要解决最佳化问题可以使用“动态规划”,从空集开始,每增加一个元素就先求出该阶段的最佳解,直到所有元素加入至集合中,最终得到的就是最佳解。
以背包问题为例,这里使用两个阵列value和item,前者表示目前的最佳解所得的总价,后者表示最后一个放至背包的水果,假设有负重为1-8kg的背包8个,并对每个背包求其最佳解,逐步将水果放入背包中,并求该阶段的最佳解。
表1:放入李子的求解过程
背包负重 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |