首页 > 其他分享 >专业学习|动态规划(概念、模型特征、解题步骤及例题)

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

时间:2024-09-22 19:49:46浏览次数:10  
标签:状态 动态 步骤 问题 解题 阶段 例题 规划 DP

一、引言

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

(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

标签:状态,动态,步骤,问题,解题,阶段,例题,规划,DP
From: https://blog.csdn.net/weixin_63253486/article/details/142350268

相关文章

  • 帝国cms怎么搭建网站教程-帝国CMS搭建安装教程详细步骤
    搭建一个基于帝国CMS(EmpireCMS,ECMS)的网站需要经历几个主要步骤:安装帝国CMS、配置网站环境、创建网站内容和管理网站。以下是一个简化的教程,指导你如何从零开始搭建一个帝国CMS网站。第一步:安装帝国CMS下载安装包访问帝国CMS官方网站或其他可信来源下载最新版本的安装包。......
  • 单调栈 详解+例题
    昨天打AT碰到了一道单调栈的题,于是来复习一下单调栈栈内元素单调性有单调递增栈和单调递减栈实现:举个例子:假设入栈序列为142893要模拟一个单调递增栈:\(i=1\)时,栈为空,\(1\)入栈后仍然保持单调性,将\(1\)入栈;\(i=2\)时,栈顶元素为\(1\),\(4\)入栈后......
  • 动态规划——问题的特征与求解步骤精解
    动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推的方式去解决。动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子阶段,按顺序求解子阶段。与分治不同的是,在动态规划过程中,前一子问题的解,为后一子问题的求解提供了有用的信息,也就是......
  • After Effects2024中文版下载:附安装包+详细安装步骤
    如大家所熟悉的,AfterEffects常常被简称为AE,它是一款专业图形视频处理软件,适用于从事设计和视频特效的机构和个人。在视频创作中熟练使用它,可以帮助您高效且精确地创建无数种引人注目的动态图形和震撼人心的视觉效果。相信用过Premiere(PR)这款视频剪辑工具的小伙伴,对AE更加不......
  • 2024年中国研究生数学建模竞赛C题——解题思路
    2024年中国研究生数学建模竞赛C题——解题思路数据驱动下磁性元件的磁芯损耗建模——解决思路二、问题描述为解决磁性元件磁芯材料损耗精确计算问题,通过实测磁性元件在给定工况(不同温度、频率、磁通密度)下磁芯材料损耗的数据,通过数学建模(或算法)方法,建立功率磁性元件的磁芯材料损耗......
  • 11----mtk芯片专用解锁工具 解除FRP 很小的工具 去除屏幕锁 免授权等等 工具预览与步
         机型的FRP锁是谷歌账号锁。工具是mtk芯片使用。可以去除当前机型的FRP和米账号重置。操作非常简单。但前提是联机驱动要装好。任何的工具联机驱动是关键。工具功能选项★★★★★工具开发者说明功能与选项操作与资源下载★★★★★具体工具操作使用指南工......
  • Java解题:求商和余数
    题目:给定两个整数,被除数和除数(都是正数,且不超过int的范围)要求不使用乘法、除法和%运算符,得到商和余数。题目分析我们知道,除法的本质其实就是被除数对除数不断地进行减法运算。所以,我们只需要循环这个运算,同时记录循环了多少次,就可以得到商。而最终若不够减,那么此时的被除数即是......
  • 从数据中台到数据飞轮:实现企业数据驱动转型的关键步骤
    随着数字变革的加速,企业对数据的依赖日益增加。数据中台作为汇集、整合企业各类数据资源的平台,已被广泛认为是企业构建数据能力的重要基础。然而,仅建立数据中台并不能完全释放数据的潜力,关键在于如何利用这些数据推动业务增长和创新。这便引出了数据飞轮的概念,即通过不断的数据积累......
  • Linux系统离线部署MySQL详细教程(带每步骤图文教程)
    1、登录官网下载对应的安装包MySQL::DeveloperZone2、将压缩包上传到服务器上,这里直接上传到/usr/local路径上使用sftp工具上传到/usr/local目录上3、解压压缩包 tar-xfmysql-8.0.39-linux-glibc2.17-x86_64.tar.xz4、将mysql-8.0.39-linux-glibc2.17-x86......
  • 数据结构 ——— 常见的时间复杂度计算例题(上篇)
    目录前言例题1:例题2:例题3:例题4:前言在上一章讲解了时间复杂度的概念,以及用大O的渐进表示法表示时间复杂度数据结构———算法的时间复杂度-CSDN博客接下来利用C语言代码的例题,更深一步的掌握用大O的渐进表示法表示代码的时间复杂度例题1:代码演示:voidFunc......