我们在介绍贪婪算法时,曾提到过背包问题,并且我们也使用了贪婪算法找到了一个近似解。那么,我们能不能找到最优解呢?让我们先来看看这个问题:
小偷有一个4公斤重的背包,他可盗窃的商品有
商品 | 价格 | 重量 |
---|---|---|
音响 | 3000元 | 4公斤 |
笔记本电脑 | 2000元 | 3公斤 |
吉他 | 1500元 | 1公斤 |
如何让盗窃的商品价值最高?
为了寻找最优解,我们当然可以使用列出所有的商品组合,然后找出最高价值的方法。在我们的问题中,有2^3 = 8中组合方式。但是我们知道这种方法并不好——每增加一件商品,需要计算的组合数量都要增加一倍。如果这个小偷的力气更大、能偷的东西更多,那么这种算法是绝对行不通的。
我们还可以用其他办法找到最优解吗?
1. 背包问题的最优解
简单的说,动态规划的原则是先解决子问题,再逐步解决大问题。我们来看看如何在背包问题中使用动态规划策略:
首先我们来画一个表格:
1公斤 | 2公斤 | 3公斤 | 4公斤 | |
---|---|---|---|---|
吉他 | ||||
音响 | ||||