《算法图解》第九章动态规划学习心得

《算法图解》——第九章 动态规划        第九章    动态规划1  动态规划——背包问题公式: 练习9.1 假设你还可偷另外一件商品——MP3播放器,它重1磅,价值1000美元。你要偷吗?要。在这种情况下,你可偷来MP3播放器和iPhone和吉他,总价值为4500美元 行的排列顺序发生变化时结果如何?答案没有变化。也就是说,各行的排列顺序无关紧要。可以逐行而不是逐列填充网格吗?就这个问题而言,这没有任何影响,但对于其他问题... 阅读详情

1、背包问题

动态规划先解决子问题,再逐步解决大问题。每个动态规划都从一个网格开始,背包问题的网格如下:


网格最初是空的,动态规划就是逐步将网格填满。

吉他行

第一个单元格表示背包的容量为1磅。 吉他的重量也是1磅, 这意味着它能装入背包! 因此这个单元格包含吉他, 价值为1500美元。 来看下一个单元格,这个单元格表示背包的容量为2磅, 完全能够装下吉他!这行的其他的单元格也是如此,因为你目前只能把吉他装入背包,其他两种商品还未出现,所以第一行变成下图:


注意:这行表示的是当前的最大价值。

 音响行

现在来到第二行,在每一行,可偷的商品都是当前行的商品和之前各行的商品。因此,当前你已经解锁了音响和吉他,但是笔记本电脑还未解锁。现在来看第一个单元格,它表示容量为1磅的背包。 在此之前, 可装入1磅背包的商品的最大价值为1500美元。 背包的容量为1磅, 能装下音响吗? 音响太重了, 装不下! 由于容量1磅的背包装不下音响, 因此最大价值依然是1500美元。 接下来的两个单元格的情况与此相同。 

现在来到了第四个单元格,也就是说背包容量为4磅,终于能装下音响,由于音响的价值为3000美元,比1500美元的吉他值钱多了,所以还是偷音响吧。


笔记本电脑行

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

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

现在来到这个问题最关键的单元格,对于容量为4磅的背包,当前的最大价值为3000美元, 你可不偷音响, 而偷笔记本电脑, 但它只值2000美元。但是笔记本电脑的重量只有3磅, 背包还有1磅的容量没用! 在1磅的容量中, 可装入的商品的最大价值之前计算过。根据之前计算的最大价值可知, 在1磅的容量中可装入吉他, 价值1500美元。于是有了下面的比较:

于是我们得到了最终的结果:


在这个过程中,我们填入单元格时用到了下面的公式:


2、背包问题FAQ

  • 沿着一列往下走时, 最大价值有可能降低吗?
答案: 不可能。 每次迭代时, 你都存储当前的最大价值。 最大价值不可能比以前低!
  • 行的排列顺序发生变化时结果将如何变化?

答案:没有变化。 也就是说, 各行的排列顺序无关紧要。

  • 可以逐列而不是逐行填充网格吗?

答案:就这个问题而言, 这没有任何影响, 但对于其他问题, 可能有影响。

  • 增加一件更小的商品将如何呢?

答案:单元格的按最小商品的重量划分。

  • 可以偷商品的一部分吗?

答案:没法处理。 使用动态规划时, 要么考虑拿走整件商品, 要么考虑不拿, 而没法判断该不该拿走商品的一部分。

但使用贪婪算法可轻松地处理这种情况! 首先, 尽可能多地拿价值最高的商品; 如果拿光了, 再尽可能多地拿价值次高的商品, 以此类推。

  • 动态规划可以处理相互依赖的情况吗?
答案:没办法建模。 动态规划功能强大, 它能够解决子问题并使用这些答案来解决大问题。 但仅当每个子问题都是离散的, 即不依赖于其他子问题时, 动态规划才管用 。

  • 计算最终的解时会涉及两个以上的子背包吗?

答案:根据动态规划算法的设计, 最多只需合并两个子背包, 即根本不会涉及两个以上的子背包。 不过这些子背包可能又包含子背包。

  • 最优解可能导致背包没装满吗?

答案:完全可能。

3、动态规划的启发

  • 动态规划可帮助你在给定约束条件下找到最优解。 在背包问题中,你必须在背包容量给定的情况下, 偷到价值最高的商品。
  • 在问题可分解为彼此独立且离散的子问题时, 就可使用动态规划来解决。
要设计出动态规划解决方案可能很难, 这正是本节要介绍的。 下面是一些通用的小贴士。
  • 每种动态规划解决方案都涉及网格。
  • 单元格中的值通常就是你要优化的值。 在前面的背包问题中, 单元格的值为商品的价值。
  • 每个单元格都是一个子问题, 因此你应考虑如何将问题分成子问题, 这有助于你找出网格的坐标轴。

4、小结

  • 需要在给定约束条件下优化某种指标时, 动态规划很有用。
  • 问题可分解为离散子问题时, 可使用动态规划来解决。
  • 每种动态规划解决方案都涉及网格。
  • 单元格中的值通常就是你要优化的值。
  • 每个单元格都是一个子问题, 因此你需要考虑如何将问题分解为子问题。
  • 没有放之四海皆准的计算动态规划解决方案的公式。

5、练习

  • 假设你还可偷另外一件商品——MP3播放器, 它重1磅, 价值1000美元。 你要偷吗?
要。 在这种情况下, 你可偷来MP3播放器和iPhone和吉他, 总价值为4500美元。
  • 假设你要去野营。 你有一个容量为6磅的背包, 需要决定该携带下面的哪些东西。 其中每样东西都有相应的价值, 价值越大意味着越重要:
                  水(重3磅, 价值10) ;
                  书(重1磅, 价值3)
                  食物(重2磅, 价值9) ;
                  夹克(重2磅, 价值5) ;
                  相机(重1磅, 价值6) 。
   请问携带哪些东西时价值最高?
    你应携带水、 食物和相机。

  • 请绘制并填充用来计算blue和clues最长公共子串的网格。














泛微E8流程监控指南:如何用SQL实时追踪审批节点状态? 本文详细介绍了如何利用SQL实时监控泛微E8系统中的审批流程状态,包括核心数据表结构解析、全链路监控SQL实战以及智能预警机制设计。通过数据库直接查询和状态关联分析,帮助企业快速定位卡顿节点,提升流程效率。适用于需要优化OA系统流程管理的企业IT人员和业务主管。 阅读详情

相关推荐

TMC步进电机驱动stealthChop

经过九九八十一难,芯片手册拜读了好多遍,找了好多资料,问了好多人使用TMC2660驱动步进电机终于成功了。最后的问题居然是硬件把管脚画错了,然后我又没有检查,哭。。。

那可真是太开心了的博客 4489

图解数据结构与算法

【为什么学习数据结构与算法】    程序=数据结构+算法。数据结构和算法是程序的基础,没有系统地学习过数据结构和算法的程序员只能称作是coder,知道我们写的代码使用了什么数据结构,它的特征是什么。知道解决某些问题是用的何种算法才会从coder晋升为工程师。另外,大厂面试数据结构和算法也是我们绕不过去的一个门槛。这部分恰好又不是突击能够解决的知识储备,所以很有必要系统地学习一下数据结构和算法了【推荐您学习这门课程的原因】1、图解数据结构与算法:拒绝抽象枯燥的学习,本课程采用动画演示的形式,让您在动画中掌握算法的底层原理。下面是课程中几个动画的演示效果:   2、实战2020大厂算法面试题:解析大厂算法面试题,分析其中算法原理,并动手实操,让大家通关面试最后一道题。  3、全面、系统化的课程设计:系统化讲解数据结构与算法,让你快速梳理整个算法知识体系,掌握算法的核心思想。 【主讲讲师】 孙玖祥:8年互联网开发经验,3年教学经验; 擅长JAVA技术栈、高并发高可用伸缩式微服务架构; 曾多次参与大型银行和互联网公司核心系统的架构设计和开发; 丰富的教学和就业经验,所带毕业学员逾千人,所带班级月内就业率均达98%以上。

IC芯片验证 - 手把手教你搭建UVM验证环境

这是一个UVM的demo项目

howard789的博客 3万+

动态规划图文详解

动态规划详解 动态规划算法(Dynamic Programming,简称 DP)似乎是一种很高深莫测的算法,你会在一些面试或算法书籍的高级技巧部分看到相关内容,什么状态转移方程,重叠子问题,最优子结构等高大上的词汇也可能让你望而却步。 而且,当你去看用动态规划解决某个问题的代码时,你会觉得这样解决问题竟然如此巧妙,但却难以理解,你可能惊讶于人家是怎么想到这种解法的。 实际上,动态规划是一种常见的「算法设计技巧」,并没有什么高深莫测,至于各种高大上的术语,那是吓唬别人用的,只要你亲自体验几把,这些名词的含义其

hwdn3000的博客 3539

【STC8G1K08A串口使用】

STC8G1K08A串口打印“Hello world”

m0_47459564的博客 1万+

bacnet 官方协议栈 bacnet-stack-0.8.2关于router例程BACnet MS/TP BACnet IP调试说明

bacnet 官方协议栈 bacnet-stack-0.8.2关于router例程mstp,bacnet ip调试说明

shufawangzhang的博客 2222

(Java) 算法——动态规划 最长公共子序列 图解

(Java) 算法——动态规划 最长公共子序列 图解

lion_no_back的博客 2672

主题033:燃烧反应工程

燃烧反应工程(Combustion Reaction Engineering)是研究燃料与氧化剂发生剧烈氧化反应的科学,涉及化学反应动力学、流体力学、传热传质等多个学科。燃烧是人类利用能源的主要方式,广泛应用于发电、交通运输、工业加热等领域。燃烧反应通常通过自由基链式反应进行。链引发:RH+O2⟶R⋅+HO2⋅ RH + O_2 \longrightarrow R^\cdot + HO_2^\cdot RH+O2​⟶R⋅+HO2⋅​链传递:R⋅+O2⟶RO2⋅ R^\cdot + O_2 \longrigh

kkchenjj的博客 230

【动态规划】01背包问题(手画图解)

01背包问题是所有背包问题的根本所在,掌握好dp五部曲,明确dp及其下标含义,勤加练习是制胜之道!

这个人很勤快,但还是什么也没有。 7601

免杀思路总结

免杀思路总结 1.免杀技术简介 1.免杀的重要性 2.免杀的难度 3.杀毒软件的排行 国外 国内 1 、Bitdefender 1、360 2 、Norton 360 2、智量安全(没测过,据说很厉害) 3 、Kaspersky 3、火绒安全 4 、Webroot 4、金山独霸 5 、Trend Micro 5

LiBai'S BLOG 1万+

深度解析:LPDDR5 采样 Mask 背后的秘密 —— 从 Jitter 到 BER 全面剖析

在 LPDDR5 中,CK/DQS 信号相当于“指挥棒”,而数据(DQ)要在时钟节拍里被准确采样。Crosspoint Mask 区域横轴:时间 (Time)纵轴:电压 (Vref)👉 只要采样点落在这个区域内,数据就是正确的。否则就会出错。BERPBERPMask 就像高速公路的收费站口,如果车(采样点🚗)在车道内,顺利通过;一旦跑偏,就撞护栏。LPDDR5 的速率极高,UI 非常短,Mask 区域成为核心指标各种 Jitter、Noise 会不断压缩 Mask。

weixin_43199439的博客 354

【算法】动态规划(Dynamic Programming)

文章目录什么是动态规划算法数字三角形经典递归解法 什么是动态规划算法 总体思想 (1)动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题 (2)经分解得到的子问题往往不是互相独立的,有些子问题被重复计算多次 (3)如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法(备忘录法) (4)图解: 使用动态规划来求解的问题需要具备的基本要素包括: (1)重复子问题 递归算法求解问题时,每次产生的子问题并不总是新问题,有些子

高朗的博客 4万+

使用 Python 构建 Reddit 热帖爬虫:抓取热门讨论帖和评论

在现代互联网中,Reddit 被誉为全球最大、最活跃的讨论平台之一,汇聚了各种主题的帖子、评论和社交互动。因此,抓取 Reddit 上的热门帖子和评论可以为我们提供一个丰富的文本数据源,可以用于情感分析、话题建模、趋势分析等应用。Reddit 提供了官方的 API,可以让开发者获取包括帖子、评论、用户信息等在内的各种数据。我们可以结合上述方法,抓取多个热门帖子,并将每个帖子的标题、作者、发布时间和评论内容保存到一个数据结构中。每个帖子的对象包含了丰富的信息,如标题、内容、发布时间、作者等。

2201_76125261的博客 382

《图解算法》第九章之动态规划

目录 《算法图解》第九章动态规划学习心得 费曼算法(Feynman algorithm) 小结 不错的一个笔记 《算法图解》第九章动态规划学习心得 学习动态规划,这是一种解决棘手问题的方法,它将问题分成小问题,并先着手解决这 些小问题。  学习如何设计问题的动态规划解决方案。 动态规划策略,一种分治策略。和贪婪策略一样,通常是用来解决最优解问题。分治故名就是将问题分解为几个...

moonlightpeng的博客 571

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

巴尔加瓦算法图解:第九章动态规划

❑ 动态规划可帮助你在给定约束条件下找到最优解。在背包问题中,你必须在背包容量给定的情况下,偷到价值最高的商品。 ❑ 在问题可分解为彼此独立且离散的子问题时,就可使用动态规划来解决。

Welcome to my homepage 1189

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

《算法图解》第九章 动态规划

第九章 动态规划 用表格法进行找最优方案 背包问题的最优方案 出去玩带东西的最优方案 对于字典查词的话,如果输入有误的话,比较俩个单词的相似性,可以用最长公共子串,不同的为零,相同的把左上方的值再加1导入当前的格子里,(为什么要引入最长公共子串呢及接着引出最长公共子序列呢),最长公共子序列,字母不同的话,就选择左边和上边格子里数值大的那个,相同的话,就是选完左边和上边格子里值大的然后再加1

心旷神怡 989

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

读书笔记 《算法图解》第九章 动态规划

读书笔记 《算法图解》第九章 动态规划 背包问题 每次迭代时,你都存储当前的最大价值。最大价值不可能比一起低! 动态规划不能只偷商品的一部分 要么偷走整个商品 要么不偷 贪婪算法可以解决这个问题(先大后小) 动态规划解决不了相互依赖的情况 根据动态规划算法的设计,最多只需合并两个子背包,根本不会涉及两个以上的子背包,不过这些子背包里面又包含子背包 动态规划可帮助你在给定约束条件下找到最优解,在背包...

weixin_44383328的博客 192

算法图解第九章笔记与习题(动态规划)

算法图解第九章笔记与习题(动态规划) 文章目录算法图解第九章笔记与习题(动态规划)9.1 动态规划9.2 背包问题FAQ9.3 最长公共子串9.3.1 最长公共子序列9.3.2 动态规划的应用9.4 小结练习习题9.1:习题9.2:习题9.3: 算法图解pdf百度云链接,提取码:jttg 9.1 动态规划 十分详细的动态规划漫画图解。 动态规划对每个单元格计算其最大价值的公式为: 9.2 背...

hwl19951007的博客 909

【学习】《算法图解》学习笔记总览

算法的效率通常用大O表示法来衡量。算法时间复杂度空间复杂度适用场景二分查找O(log n)O(1)有序数组中查找元素选择排序O(n²)O(1)小型数据集排序快速排序平均O(n log n),最坏O(n²)O(log n)通用排序场景广度优先搜索O(V+E)O(V)最短路径问题,V为顶点数,E为边数迪杰斯特拉算法O(V)带权图的最短路径贪心算法视具体问题而定视具体问题而定局部最优可导致全局最优的问题动态规划视具体问题而定视具体问题而定。

一个普通程序员的成长记录簿 1341

图解算法:五大常用算法

目录第一章 递归算法介绍第二章 递归算法应用2.1、求阶乘第三章 回溯算法介绍第四章 回溯算法应用4.1、走迷宫第五章 分治算法介绍第六章 分治算法应用6.1、汉诺塔 项目地址:https://gitee.com/caochenlei/algorithms 第一章 递归算法介绍 递归算法(recursion algorithm)又称递归法,简单的来说,就是函数自己调用自己。绝大多数编程语言中都支持函数的自调用,在这些语言中函数是可以通过调用自身来进行递归的。计算理论可以证明递归的作用可以完全取代循环,

轻松的小希 6417

算法图解

注:此文主要用于《算法图解》一书各章节知识点概述。 第一章: 二分查找算法O(logn) 算法程序: 简单查找算法O(n) 大O运行时间: O(logn) < O(n) < O(nlogn) < O(n²) < O(n!) 先排序,再查找 第二章: 数组:适用于读取很多 读取O(1) 插入O(n) 删除O(n) 链表:适用于插入很多 读取O(n) 插入O(1)...

Steve_Kung的博客 1186

[笔记]《算法图解》第九章 动态规划

动态规划 动态规划先解决子问题,再逐步解决大问题。 启示 动态规划可帮助你在给定约束条件下找到最优解。 在问题可分解为彼此独立且离散的子问题时,就可使用动态规划来解决。 每种动态规划解决方案都涉及网格。 单元格中的值通常就是你要优化的值。 每个单元格都是一个子问题,因此你应考虑如何将问题分成子问题,这有助于你找出网格的坐标轴。 动态规划实际应用 生物学家根据最长公共序列来确定DNA...

dideng8675的博客 196

推荐一本动态规划启蒙书

算法图解 动态规划在第九章,建议多看几遍

hewesH的博客 473

❤️Python背包问题❤️ 算法图解:第九章:动态规划

动态规划功能强大,它能够解决子问题并使用这些答案来解决大问题。但仅当每个子问题都是离散的,即不依赖于其他子问题时,动态规划才管用!

拥有百余位万粉技术博主、200余位可合作代发博主,私域技术社群规模达千人,商务合作私信 2902

算法图解第九章动态规划背包问题

1.0-1背包问题: 有N件物品和一个容量为V的背包,第i件物品消耗的容量为weight[i] 价值为value[i],求解放入哪些物品可以使得背包的总价值最大 ps:每件物品只有一件 代码示例`` package nine; /** * 0-1背包问题: * 有N件物品和一个容量为V的背包,第i件物品消耗的容量为weight[i] * 价值为value[i],求解放入哪些物品可以使得...

weixin_45438549的博客 279

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

动态规划 需要在给定约束条件下优化某种指标时,动态规划很有用。 动态规划先解决子问题,再逐步解决大问题。问题可分解为离散子问题时,可使用动态规划来解决。 在动态规划中,你要将某个指标最大化。 动态规划功能强大,它能够解决子问题并使用这些答案来解决大问题。但仅当每个子问题都是离散的,即不依赖于其他子问题时,动态规划才管用。这意味着使用动态规划算法解决不了去巴黎玩的问题。 ❑ 动态规划可帮助你在给定约...

余欲与鱼语渔 2491
上一篇: 《算法图解》第八章贪婪算法学习心得
下一篇: 《算法图解》第十章K最近邻算法学习心得
gxls2024
博客等级 码龄9年 1079粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gxls2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值