动态规划算法设计字符串比较问题_算法丨动态规划——背包问题

9876f2c974f3e16e7218b48a9fd593bd.png

背包问题

再看上一节的背包问题,假设你是一个小偷,背着一个可装4磅东西的背包。

可盗窃的商品有3件。

d04c57a9f76475fe0dacfd2335a06fd3.png

简单算法

最简单的算法如下:尝试各种可能的商品组合,并找出价值最高的组合。

这样可行,但速度非常慢。在有3件商品的情况下,需要计算8种不同的集合;有4件商品时,需要计算16个集合。每增加一件商品时,需要计算的集合数都将翻倍。这种算法的运行时间为O(2^n)。

贪婪算法可以找到近似解,但是不能找到最优解。

动态规划

对于背包问题,先决定小背包(子背包)问题,在逐步解决原来的问题。

每个动态规划算法都从一个网格开始,背包问题的网格如下:

43a9c1dfa1585f46ff0bae3c3b371206.png

网格的各行为商品,各列为不同容量(1~4磅)的背包。所有这些列你都需要,因为他们将帮助你计算子背包的价值。

网格最初是空的,你将填充其中的每个单元格,网格填满后,就找到了问题的答案。

吉他行

这是吉他行,意味着你将尝试将吉他装入背包。在每个单元格,都需要做一个简单的决定:偷不偷吉他?

第一个单元格表示背包的容量为1磅。吉他的重量也是一磅,这意味着它能装入背包!因此这个单元格包含吉他,价值为1500美元。

与这个单元格一样,每个单元格都将包含当前可装入背包的所有商品。

这行的其他单元格也一样,别忘了,这是第一行,只有吉他可供选择。换言之,假装现在还没有盗窃其他两件商品。

7e3f72de1c09214082d63e3d9eb77a1e.png

动态规划从小问题着手,逐步解决大问题。这里解决的子问题将帮助你解决的大问题。从图中该行可得出,如果有一个容量4磅的背包,可在其中装入的商品的最大价值为1500美元。

音响行

来填充下一行——音响行。现在处于第二行,可偷的商品有吉他和音响。在每一行,可偷的商品都为当前行的商品以及之前各行的商品。因此还不能偷笔记本电脑,而只能偷音响和吉他。

先看第一个单元格,它表示容量为1磅的背包。在此之前,可装入1磅背包的商品的最大价值为1500美元。

背包的容量为1,装不下音响!由于容量1磅的背包装不下音响,因此最大价值依然是1500美元。

78074a793fc393fd499f8efb820fc900.png

接下来两个单元格的情况依然如此。在这些单元格中,背包的容量分为2磅和3磅,而以前的最大价值为1500美元。

999f945359df330c1e566248783b2e34.png

由于这些背包装不下音响, 因此最大价值保持不变。背包容量为4磅才能装下音响。原来最大价值为1500美元,但如果在背包装入的是音响而不是吉他,价值将为3000美元。

f813cc3506d36a81751a7619ae481e49.png

在这个网格中,将逐步地更新最大价值。

笔记本电脑行

下面以同样的方式处理笔记本电脑。笔记本电脑中3磅,没法将其装入容量为1磅或2磅的背包,因此前两个单元格的最大价值还是1500美元。

70f90d08343121bff045fd1a647e756b.png 

对于容量为3磅的背包,原来的最大价值为1500美元,但现在可选择盗窃价值2000美元的笔记本电脑而不是吉他,这样新的最大价值将为2000美元。

0b7a1a7edebe588476fae50514c2c627.png

对于4磅的背包,这是非常重要的部分。当前最大价值为3000美元。但是笔记本的重量只有3磅,还有1磅容量没用!

在1磅的容量中,可装入的商品的最大价值是1500,之前有计算过。因此需要看下音响 vs 笔记本和吉他。那边价值更高。

最终的网格类似如下

84750c1b2a9bba24544b014ab677845f.png

答案如下:将吉他和笔记本电脑装入背包时价值最高,为3500美元。

你可能认为,计算最后一个单元格的价值,使用了不同的公式。那是因为填充之前的单元格时,故意避开了一些复杂的因素。其实,计算每个单元格的价值时,使用的公式都相同,公式如下:

5997414265ca8627a6c795d7f8e82c51.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值