专业学习|动态规划(概念、模型特征、解题步骤及例题)

news2024/11/14 20:32:24

一、引言

(一)从斐波那契数列引入自底向上算法

(1)知识讲解

(2)matlap实现递归

(3)带有备忘录的遗传算法

(4)matlap实现带有备忘录的递归算法

“;”是为了不显示中间的计算结果;“==”双等号表示判断;“tic、toc”运算开始和结束的时间;

(5)采用自低向上的算法进行求解和代码实现

(二)从斐波那契数列(解决)引入动态规划

(1)从斐波那契数列引入动态规划

(2)动态规划中的常见概念

(3)动态规划解题思路

(4)例题讲解

1)使用递归解决打家劫舍问题

上述使用递归的方法会出现重叠子问题。

2)使用动态规划解决打家劫舍问题

3)动态规划中状态压缩的技巧

5)输出盗窃房屋的编号

(5)动态规划中的最优子结构和无后效性

(6)利用调试功能窥探动态规划函数内部

二、动态规划介绍

(一)动态规划中的常见到的概念

        这里我们还是以求解斐波那契数列来举例子,尽管它不算严格的动态规划:

(1)子问题和原问题

        原问题就是你要求解的这个问题本身,子问题是和原问题相似但规模较小的问题(原问题本身就是子问题的最复杂的情形,即子问题的特例)。例如:要求F(10),那么求出F(10)就是原问题,求出F(k)(k≤10)都是子问题。

(2)状态

        状态就是子问题中会变化的某个量,可以把状态看成我们要求解的问题的自变量。

        例如:我们要求的F(10),那么这里的自变量10就是一个状态。

(3)状态转移方程

        能够表示状态之间转移关系的方程,一般利用关于状态的某个函数建立起来。例如:F(n)=F(n-1)+ F(n-2),当n为>2的整数时;当n=1或2时,F(n)=1,这种最简单的初始条件一般称为边界条件,也被称为基本方程。

(4)DP数组(DP就是动态规划的缩写)

        DP 数组也可以叫"子问题数组",因为 DP 数组中的每一个元素都对应一个子问题的结果,DP数组的下标一般就是该子问题对应的状态。例如:使用自底向上法编程求解时,我们定义的向量FF就可以看成一个DP数组数组下标从1取到n,对应的元素从F(1)取到F(n)。

(二)动态规划建模过程

(1)概述:

        建立动态规划的模型,就是分析问题并建立问题的动态规划基本方程。成功地应用动态规划方法的关键,在于识别问题的多阶段特征,将问题分解成为可用递推关系式联系起来的若干子问题,而正确建立基本递推关系方程的关键又在于正确选择状态变量,保证各阶段的状态变量具有递推的状态转移关系.

(2)动态规划模型的建立:

        动态规划模型的构成要素:阶段、状态变量、决策变量、状态转移方程以及指标函数,如下图所示

(3)模型建立要点

1.分析题意,识别问题的多阶段特性,按时间或空间的先后顺序适当地划分为满足递推关系的若干阶段,对非时序的静态问题要人为地赋予“时段”概念。

2.正确地选择状态变量,使其具备两个必要特征:

(1)可知性;即过程演变的各阶段状态变量的取值,能直接或间接地确定。

(2)能够确切地描述过程的演变且满足无后效性。即由第k阶段的状态sk出发的后部子过程,可以看作是一个以sk为初始状态的独立过程。

3.根据状态变量与决策变量的含义,正确写出状态转移方程或转移规则。

4.正确列出最优指标函数的递推关系及边界条件(即基本方程)。

(4)动态规划的求解:

        动态规划的求解有两种基本方法:逆序解法(后向动态规划方法)、顺序解法(前向动态规划方法)

        逆序解法即寻优的方向与多阶段决策过程的实际行进方向相反,从最后一段开始计算逐段前推,求得全过程的最优策略。与之相反,顺序解法的寻优方向与过程的行进方向相同,计算时从第一段开始逐段向后递推,计算后一阶段要用到前一阶段的求优结果,最后一段计算的结果就是全过程的最优结果。

        顺序解法与逆序解法本质上并无区别,一般来说,当初始状态给定时可用逆序解法,当终止状态给定时可用顺序解法。若问题给定了一个初始状态与一个终止状态,则两种方法均可使用。两者的不同之处主要有三点:状态转移方式不同;最优指标函数定义不同;基本方程形式不同。

1)状态转移方式不同

 2)指标函数的定义不同

 3)基本方程形式不同

(5)动态建模框架

(三)零钱兑换问题讲解(动态规划例题)

(1)零钱兑换问题分析

(2)编程求解

(3)怎样得到具体的硬币组合(分析及matlap实现)

(4)贪心算法解决生活中的找零问题

(5)扩展-背包问题扩展

(四)DP问题分类

DP 类型介绍解决问题性质解题步骤经典案例
线性 DP针对单串或双串进行状态转移,通常涉及到子序列、子数组的性质。子序列、子数组的优化定义状态,建立递推关系,填写状态表300. 最长上升子序列 <br> 1143. 最长公共子序列 <br> 120. 三角形最小路径和 <br> 53. 最大子序和 <br> 152. 乘积最大子数组 <br> 887. 鸡蛋掉落 <br> 354. 俄罗斯套娃信封问题 <br> 198. 打家劫舍 <br> 213. 打家劫舍 II <br> 股票系列(121, 122, 123, 188, 309, 714) <br> 字符串匹配系列(72, 44, 10)
区间 DP通过定义区间状态来求解问题,常用于字符串和序列的性质。区间划分、优化定义区间状态,转移时考虑区间内的所有可能516. 最长回文子序列 <br> 730. 统计不同回文子字符串 <br> 1039. 多边形三角剖分的最低得分 <br> 664. 奇怪的打印机 <br> 312. 戳气球
背包 DP解决选择问题的背包问题,通过状态转移实现选择和价值的最优化。最优选择、容量限制定义物品和背包状态,转移时考虑物品的选择情况416. 分割等和子集 <br> 494. 目标和 <br> 322. 零钱兑换 <br> 518. 零钱兑换 II <br> 474. 一和零
树形 DP针对树形结构进行动态规划,利用树的递归性质。树的路径、子树性质深度优先遍历,维护状态124. 二叉树中的最大路径和 <br> 1245. 树的直径 <br> 543. 二叉树的直径 <br> 333. 最大 BST 子树 <br> 337. 打家劫舍 III
状态压缩 DP通过位运算压缩状态,用于处理较大状态空间的情况。状态压缩、子集优化使用位运算表示状态,维护状态转移464. 我能赢吗 <br> 526. 优美的排列 <br> 935. 骑士拨号器 <br> 1349. 参加考试的最大学生数
数位 DP解决涉及数字的组合和计数问题,通常用于约束条件下的数字组合。数字组合、计数定义数字状态,考虑每位的取值和限制233. 数字 1 的个数 <br> 902. 最大为 N 的数字组合 <br> 1015. 可被 K 整除的最小整数
计数型 DP通过计数方法解决路径、组合等问题,结合组合数学原理。路径计数、组合计数定义路径或组合状态,利用数学公式进行转移62. 不同路径 <br> 63. 不同路径 II <br> 96. 不同的二叉搜索树 <br> 1259. 不相交的握手
递推型 DP使用递推关系,通过快速幂等方法提高计算效率。递推关系、状态转移定义递推关系,利用快速幂优化计算70. 爬楼梯 <br> 509. 斐波那契数 <br> 935. 骑士拨号器 <br> 957. N 天后的牢房 <br> 1137. 第 N 个泰波那契数
概率型 DP用于计算概率和期望值,常见于随机过程问题。概率计算、期望值定义状态转移方程,利用概率性质进行推导808. 分汤 <br> 837. 新21点
博弈型 DP涉及两方博弈的问题,通过博弈论原理分析最优策略。策略优化、对抗性游戏定义状态,分析最优选择,通常使用极小化或极大化293. 翻转游戏 <br> 294. 翻转游戏 II <br> 292. Nim 游戏 <br> 877. 石子游戏 <br> 1140. 石子游戏 II <br> 348. 判定井字棋胜负 <br> 794. 有效的井字游戏 <br> 1275. 找出井字棋的获胜者
记忆化搜索结合深度优先搜索和记忆化技术,适用于状态转移不确定的情况。状态空间优化、DFS使用递归和哈希表存储结果,避免重复计算329. 矩阵中的最长递增路径 <br> 576. 出界的路径数

        参考:力扣上的 DP 问题分类汇总 - 力扣(LeetCode)

三、动态规划——求解多阶段决策过程最优化问题的数学方法

(一)多阶段决策模型及其特点

        多阶段决策过程,是指这样的一类特殊的活动过程,问题可以按时间顺序分解成若干相互联系的阶段,在每一个阶段都要做出决策,全部过程的决策是一个决策序列。

根据过程的特性可以将过程按空间、时间等标志分为若干个互相联系又互相区别的阶段。

在每一个阶段都需要做出决策,从而使整个过程达到最好的效果。

各个阶段决策的选取不是任意确定的,它依赖于当前面临的状态,又影响以后的发展。

当各个阶段的决策确定后,就组成了一个决策序列,因而也就决定了整个过程的一条活动路线,这样的一个前后关联具有链状结构的多阶段过程就称为多阶段决策问题。

(二)动态规划求解案例

        针对多阶段决策过程的最优化问题,美国数学家Bellman等人在20世纪50年代初提出了著名的最优化原理,把多阶段决策问题转化为一系列单阶段最优化问题,从而逐个求解,创立了解决这类过程优化问题的新方法:动态规划。

        对最佳路径(最佳决策过程)所经过的各个阶段,其中每个阶段始点到全过程终点的路径,必定是该阶段始点到全过程终点的一切可能路径中的最佳路径(最优决策),这就是Bellman提出的著名的最优化原理。即 一个最优策略的子策略必然也是最优的。

来源:求解多阶段决策过程最优化问题-CSDN博客

        A地到 E 地要铺设一条煤气管道,其中需经过三级中间站,两点之间的连线上的数字表示距离。如图所示,问应该选择什么路线,使总距离最短?
解:整个计算过程分为四个阶段,从最后一个阶段开始。

第四阶段:有两条路。 ①D1E=5,②D2E=2。②最优。


第三阶段:有六条路。

经过C1点——①C1D1+5=8,②C1D2+2=11。

他山之石(参考借鉴)

[1]利用调试功能窥探动态规划函数内部_bilibili

[2]数学建模优化类问题—动态规划_动态规划模型-CSDN博客

[3]【labuladong】动态规划核心套路详解_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2157101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

0基础跟德姆(dom)一起学AI 数据处理和统计分析06-数据组合和缺失值处理

* 数据组合 * concat * merge * join(了解) * 缺失值处理 * apply方法详解 --- 1.DataFrame数据组合-concat连接 * 概述 * 连接是指把某行或某列追加到数据中, 数据被分成了多份可以使用连接把数据拼接起来 * 把计算的结果追加到现有数据集&#xff0c;也可以使用连…

Redis:常用命令总结

目录 1 . 前置内容 1.1 基本全局命令 KEYS EXISTS DEL EXPIRE TTL TYPE 1.2 数据结构和内部编码 2. String类型 SET GET MGET MSET INCR INCRBY DECR DECRBY INCRBYFLOAT 命令小结​编辑 内部编码 3 . Hash 哈希类型 HSET HGET HEXISTS HDEL HKEYS …

Qemu开发ARM篇-5、buildroot制作根文件系统并在qemu中进行挂载启动

文章目录 1、 buildroot源码获取2、buildroot配置3、buildroot编译4、挂载根文件系统 在上一篇 Qemu开发ARM篇-4、kernel交叉编译运行演示中&#xff0c;我们编译了kernel&#xff0c;并在qemu上进行了运行&#xff0c;但到最后&#xff0c;在挂载根文件系统时候&#xff0c;挂…

嵌入式单片机STM32开发板详细制作过程--01

大家好,今天主要给大家分享一下,单片机开发板的制作过程,原理图的制作与PCB设计,以及电子元器件采购与焊接。 第一:单片机开发板成品展示 板子正面都有各个芯片的丝印与标号,方便焊接元器件的时候,可以参考。(焊接完成之后,成品图如下) 第二:开发板原理图制作 在制…

OpenCV系列教程三:形态学、图像轮廓、直方图

文章目录 一、形态学1.1 阈值处理1.1.1 全局阈值处理1.1.2 全局阈值处理之Otsus 阈值法1.1.3 自适应阈值处理 1.2 腐蚀与膨胀1.2.1 腐蚀操作1.2.2 创建形态学卷积核1.2.3 膨胀操作 1.3 开运算和闭运算1.4 形态学梯度1.5 顶帽操作(tophat)1.6 黑帽操作&#xff08;Black Hat&…

基于JAVA+SpringBoot+Vue的社区智慧养老监护管理平台

基于JAVASpringBootVue的社区智慧养老监护管理平台 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末附源码下载链接&#x1…

Arthas heapdump(dump java heap, 类似 jmap 命令的 heap dump 功能)

文章目录 二、命令列表2.1 jvm相关命令### 2.1.8 heapdump&#xff08;dump java heap, 类似 jmap 命令的 heap dump 功能&#xff09;举例1&#xff1a;假设你想生成一个只包含活动对象的堆转储文件&#xff0c;并将其保存为 /tmp/heapdump.hprof举例2&#xff1a;如果你想要进…

社区团购的创新与变革——融合开源链动 2+1 模式、AI 智能名片及 S2B2C 商城小程序

摘要&#xff1a;本文从信息流、资金流、物流角度深入分析社区团购的特点&#xff0c;探讨其如何避免传统线下中心零售的高展示成本与传统电商的高交付成本。同时&#xff0c;引入开源链动 21 模式、AI 智能名片及 S2B2C 商城小程序等创新元素&#xff0c;阐述它们为社区团购带…

MySQL---创建数据库(基于SQLyog)

目录 0.前言 1.基本认识 1.1编码集 1.2检验规则 2.库的创建和销毁 2.1指令介绍 2.2你可能会出现的问题 3.查看数据库属性 4.创建指定数据库 5.创建表操作 0.前言 之前写过一篇这个关于表的创建和销毁的操作&#xff0c;但是当时是第一次学习&#xff0c;肯定有些地方…

华为OD机试 - N个选手比赛前三名、比赛(Java 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

【STM32】TIM定时器定时中断与定时器外部时钟的使用

TIM定时器定时中断与定时器外部时钟的使用 一、TIM定时器简介1、TIM&#xff08;Timer&#xff09;定时器2、定时器类型3、高级定时器4、通用定时器5、基本定时器6、定时中断基本结构代码编写&#xff1a;定时中断/外部时钟定时中断 7、预分频器时序8、计数器时序9、计数器无预…

手写SpringMVC

1、开发HspDispatcherServlet 2、完成客户端/浏览器可以请求控制层 目的&#xff1a;发出url请求时&#xff0c;经过前端控制器&#xff0c;找到Monster的List方法&#xff0c;把结果再打回去 3、从web.xml动态获取hspspringmvc.xml 4、完成自定义Service注解功能 目的&…

【功能详解】IoTDB 与 ThingsBoard 成功集成!

可视化工具集成1 IoTDB 实现了 ThingsBoard 的无缝集成对接&#xff0c;IoTDB 构建的工业数据存储处理-可视化呈现链路又多了一种可用、易用的工具选择。 我们的代码已贡献到 ThingsBoard 社区&#xff08;待发版&#xff09;&#xff0c;用户手册也已发布&#xff08;可点击下…

HBASE_题库详解

1、 HBase的特点是什么&#xff1f; 1&#xff09;大&#xff1a;一个表可以有数十亿行&#xff0c;上百万列 2&#xff09;无模式&#xff1a;每行都有一个可排序的主键和任意多的列&#xff0c;列可以根据需要动态的增加&#xff0c;同一张表中不同的行可以有截然不同的列 3…

浪涌抑制-功率NTC选型计算

目录&#xff1a; 一、概述 二、NTC抑制浪涌原理 三、功率NTC的介绍 四、功率NTC选型原则 1、峰值正向浪涌电流 2、阻值选取 3、正常工作的计算 一、概述 NTC热敏电阻除用于温度测量(热敏电阻温度检测-分段曲线拟合、Steinhart-Hart与查表)外&#xff0c;在电源中常用于…

word如何快速打开文档中的网址超链接?

1、鼠标放在文档中超链接上&#xff1a; 2、然后左手按住【CTRL】键&#xff0c;之后鼠标光标会变成一个手形&#xff0c; 然后右手&#xff0c;点击鼠标左键&#xff0c;即可快速使用电脑当前设置的默认浏览器打开并跳转到网址&#xff1a;

三阶魔方还原法 勾上回下 上右左左右

三阶魔方还原法&#xff1a; 1小白花 &#xff08;转3换1&#xff09; 2白十字架 (侧与中心同色 下下) 3第一层 &#xff08;找位置角块放顶点 勾上回下&#xff09; 4 第二层 &#xff08;颜色边 勾上回下 再单白边 勾上回下&#xff09; 5 黄十字架 &#xff08;无黄边 压 勾…

nodejs基于vue电子产品商城销售网站的设计与实现 _bugfu

目录 技术栈具体实现截图系统设计思路技术可行性nodejs类核心代码部分展示可行性论证研究方法解决的思路Express框架介绍源码获取/联系我 技术栈 该系统将采用B/S结构模式&#xff0c;开发软件有很多种可以用&#xff0c;本次开发用到的软件是vscode&#xff0c;用到的数据库是…

告别枯燥:我开发了一个在电脑桌面上使用弹幕来背单词的软件

前言 在这个快节奏的时代&#xff0c;我们每天都在忙碌中度过&#xff0c;手机虽然方便&#xff0c;但往往难以找到一整块时间来专心背单词。然而&#xff0c;你是否意识到&#xff0c;每天坐在电脑前的时间远比使用手机的时间要长&#xff1f;现在我们来介绍一个新型的学习软…

阿里云kafka消息写入topic失败

1. 问题现象描述 20240918,14:22&#xff0c;测试反馈说kafka有问题&#xff0c;生产者写入消息的时候报错&#xff0c;并发了一张日志截图&#xff0c;主要报错如下&#xff1a; to topic xxxx: org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for x…