笔记:《算法图解》第九章:动态规划——在给定约束条件下优化某种指标

1.动态规划概述

动态规划,这是一种解决棘手问题的方法,它将问题分成小问题,并先着手解决这些小问题,再逐步解决大问题。
❑ 需要在给定约束条件优化某种指标时,动态规划很有用。
❑ 在问题可分解为彼此独立且离散的子问题时,就可使用动态规划来解决。
仅当每个子问题都是离散的,即不依赖于其他子问题时,动态规划才管用。
❑ 没有放之四海皆准的计算动态规划解决方案的公式。

2.动态规划的网格方法:

❑ 每种动态规划解决方案都 涉及网格
单元格中的值通常就是你要优化的值。在前面的背包问题中,单元格的值为商品的价值。
❑ 每个单元格都是一个子问题,因此你应考虑如何将问题分成子问题,这有助于你找出网格的坐标轴。

绘制网格

用于解决这个问题的网格是什么样的呢?要确定这一点,你得回答如下问题。
❑ 单元格中的值是什么?单元格中的值通常就是你要优化的值
❑ 如何将这个问题划分为子问题?
❑ 网格的坐标轴是什么?
案例 :
对于背包问题,先解决小背包(子背包)问题,再逐步解决原来的问题。
每个动态规划算法都从一个网格开始,背包问题的网格如下。
在这里插入图片描述
网格的各行为商品,各列为不同容量(1~4磅)的背包。所有这些列你都需要,因为它们将帮助你计算子背包的价值。网格最初是空的。你将填充其中的每个单元格,网格填满后,就找到了问题的答案!
1.吉他行
首先来看第一行。这是吉他行,意味着你将尝试将吉他装入背包。在每个单元格,都需要做一个简单的决定:偷不偷吉他?别忘了,你要找出一个价值最高的商品集合。第一个单元格表示背包的容量为1磅。吉他的重量也是1磅,这意味着它能装入背包!因此这个单元格包含吉他,价值为1500美元。下面来开始填充网格。
在这里插入图片描述
与这个单元格一样,每个单元格都将包含当前可装入背包的所有商品。来看下一个单元格。这个单元格表示背包的容量为2磅,完全能够装下吉他!
在这里插入图片描述
这行的其他单元格也一样。别忘了,这是第一行,只有吉他可供你选择。换言之,你假装现在还没法盗窃其他两件商品。
在这里插入图片描述
此时你很可能心存疑惑:原来的问题说的是4磅的背包,我们为何要考虑容量为1磅、2磅等的背包呢?前面说过,动态规划从小问题着手,逐步解决大问题。这里解决的子问题将帮助你解决大问题。
你要做的是让背包中商品的价值最大。这行表示的是当前的最大价值。它指出,如果你有一个容量4磅的背包,可在其中装入的商品的最大价值为1500美元。
在这里插入图片描述
2.音响行
你现在处于第二行,可偷的商品有吉他和音响。在每一行,可偷的商品都为当前行的商品以及之前各行的商品。因此,当前你还不能偷笔记本电脑,而只能偷音响和吉他。我们先来看第一个单元格,它表示容量为1磅的背包。在此之前,可装入1磅背包的商品的最大价值为1500美元。
在这里插入图片描述
该不该偷音响呢?背包的容量为1磅,能装下音响吗?音响太重了,装不下!由于容量1磅的背包装不下音响,因此最大价值依然是1500美元。
在这里插入图片描述
接下来的两个单元格的情况与此相同。在这些单元格中,背包的容量分别为2磅和3磅,而以前的最大价值为1500美元。
在这里插入图片描述
由于这些背包装不下音响,因此最大价值保持不变。背包容量为4磅呢?终于能够装下音响了!原来的最大价值为1500美元,但如果在背包中装入音响而不是吉他,价值将为3000美元!因此还是偷音响吧。
在这里插入图片描述
你更新了最大价值!如果背包的容量为4磅,就能装入价值至少3000美元的商品。在这个网格中,你逐步地更新最大价值。
在这里插入图片描述
3.笔记本电脑行
下面以同样的方式处理笔记本电脑。笔记本电脑重3磅,没法将其装入容量为1磅或2磅的背包,因此前两个单元格的最大价值还是1500美元。
[插图]
对于容量为3磅的背包,原来的最大价值为1500美元,但现在你可选择盗窃价值2000美元的笔记本电脑而不是吉他,这样新的最大价值将为2000美元!
[插图]
对于容量为4磅的背包,情况很有趣。这是非常重要的部分。当前的最大价值为3000美元,你可不偷音响,而偷笔记本电脑,但它只值2000美元。
[插图]
价值没有原来高。但等一等,笔记本电脑的重量只有3磅,背包还有1磅的容量没用!
[插图]
在1磅的容量中,可装入的商品的最大价值是多少呢?你之前计算过。
[插图]
根据之前计算的最大价值可知,在1磅的容量中可装入吉他,价值1500美元。因此,你需要做如下比较。
[插图]
你可能始终心存疑惑:为何计算小背包可装入的商品的最大价值呢?但愿你现在明白了其中的原因!余下了空间时,你可根据这些子问题的答案来确定余下的空间可装入哪些商品。笔记本电脑和吉他的总价值为3500美元,因此偷它们是更好的选择。最终的网格类似于下面这样。
[插图]
答案如下:将吉他和笔记本电脑装入背包时价值最高,为3500美元。

计算每个单元格的价值时,使用的公式都相同。这个公式如下。

[插图]
你可以使用这个公式来计算每个单元格的价值,最终的网格将与前一个网格相同。现在你明白了为何要求解子问题吧?你可以合并两个子问题的解来得到更大问题的解。

练习

9.1 假设你还可偷另外一件商品——MP3播放器,它重1磅,价值1000美元。你要偷吗?
9.2 假设你要去野营。你有一个容量为6磅的背包,需要决定该携带下面的哪些东西。其中每样东西都有相应的价值,价值越大意味着越重要:❑ 水(重3磅,价值10);❑ 书(重1磅,价值3)❑ 食物(重2磅,价值9);❑ 夹克(重2磅,价值5);❑ 相机(重1磅,价值6)。请问携带哪些东西时价值最高?
9.3 请绘制并填充用来计算blue和clues最长公共子串的网格。

答案

9.1 要。在这种情况下,你可偷来MP3播放器和iPhone和吉他,总价值为4500美元。
9.2 你应携带水、食物和相机。
9.3
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值