动态规划法的基本知识
一、动态规划方法相关概念
1、20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优性原理(principle of optimality),同时,把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决多阶段决策问题的优化方法------动态规划法。
比如:
2、问题的求解过程可划分为若干阶段,每一阶段的决策仅依赖于前一阶段的状态,由决策所采取的动作使状态发生转移,成为下一阶段决策的依据。从而,一个决策序列(策略)在不断变化的状态中产生,这个过程称为多阶段决策过程。
3、状态转移方程
4、最优决策序列
5、最优性原理
二、动态规划法的设计思想
1、动态规划法适用条件
①满足最优性原理:也称具有最优子结构性质,该问题的最优解中也包含其子问题的最优解。
②重叠子问题:可分解为相互关联的若干子问题,子问题之间不独立,子问题的解在下一阶段决策中可能被使用。
③无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。
2、动态规划方法设计思想
利用最优子结构性质,把整个问题划分成一系列子问题,求各子问题的最优解,然后以自底向上的方式递归地从子问题的最优解构造出整个问题的最优解。
"填表”----构建数据结构,保存各子问题的最优解,以便求整个问题最优解。
3、动态规划与分治法异同
●相同之处:
都是将待求解问题分解成若干个子问题,先求子问题的解,然后通过这些子问题的解获得整个问题的解。
●不同之处:
①分治法:子问题相互独立,否则重复求解,效率低。
②动态规划:各个子问题之间一般具有关联性,为了避免重复计算,动态规划方法对每个子问题仅求解一次,并将其结果"填表”,以后用到时直接存取。
比如:
动态规划法求解斐波那契数列:
①为此避免重复设计,设计一个dp数组,dp[i]存放Fib(i)的值,首先设置dp[1]和dp[2]均为1,再让i从3到n循环以计算dp[3]到dp[n]的值,最后返回dp[n]即Fib1(n)。②其执行过程改变为自底向上,即先求出子问题解,将计算结果存放在一张表中,而且相同的子问题只计算一次,在后面需要时只需要简单查表,以避免大量的重复计算。
③算法的时间复杂度为O(n),空间复杂度为O(n)
④上述求斐波那契数列的算法属于动态规划法,其中数组dp(表)称为动态规划数组。
4、空间优化方法——滚动数组
- 在动态规划算法中,常用动态规划数组存放子问题的解,由于一般是存放连续的解,有时可以对数组的下标进行特殊处理,使每一次操作仅保留若干有用信息,新的元素不断循环刷新,看上去数组的空间被滚动地利用,这样的数组称为滚动数组(Scroll array)。
- 采用滚动数组的主要目的是压缩存储空间的作用。
三、动态规划法的设计步骤
(1)划分子问题(分段) :将整个问题分解为若干子问题,找到问题状态,子问题之间具有重叠(关联)关系;
(2)构建状态转移方程(分析) :关联的状态和状态之间相互转换关系。—动态规划法的关键;
(3)存储状态的值求解(填表): 设计表格(即数据结构),以自底向上的方式计算各个子问题的解并填表保存,实现动态规划过程。
动态规划过程一般求得问题的最优值(即目标函数的极值),如果要求最优解,通常在动态规划过程中记录必要信息,再根据依据这些信息构造最优解。
四、动态规划问题的俩种解法
对于有k个阶段的动态规划问题:
- 逆序解法:从第k阶段到第1阶段的求解过程
- 顺序解法:从第1阶段到第k阶段的求解过程
五、动态规划小结
- 适用条件:满足最优性原理(即具有最优子结构性质)且子问题一般具有重叠性;
- 设计思想:利用最优性原理,把原问题划分成一系列子问题,每个子问题属于决策过程的一个阶段,然后以自底向上的方式递归地从子问题的最优解构造出原问题的最优解。
- 求解步骤:①划分子问题;②构建状态转移方程;③存储状态的值求解(填表)。
- 两种解法:顺序解法和逆序解法
动态规划法的基本知识相关推荐
- 五大经常使用算法 之 动态规划法
一.基本概念 动态规划过程是:每次决策依赖于当前状态.又随即引起状态的转移. 一个决策序列就是在变化的状态中产生出来的,所以,这样的多阶段最优化决策解决这个问题的过程就称为动态规划. 动态规划是运筹学 ...
- 扎实的基础知识、高质量的代码
扎实的基础知识.高质量的代码.清晰的思路.优化代码的能力.优秀的综合能力是编程技术面试的五大要点. 找工作一直是一个热门话题.要想找到心仪的工作,难免需要经过多轮面试.编程面试是程序员面试过程中最为重 ...
- 关于图计算图学习的基础知识概览:前置知识点学习(PGL)[系列一]
关于图计算&图学习的基础知识概览:前置知识点学习(Paddle Graph Learning (PGL)) 0.1图计算基本概念 首先看到百度百科定义: 图计算(Graph Processin ...
- 软件设计师-知识的整理
第1-2章 计算机网络和程序设计基础 原码.反码.补码.移码 浮点数的原码.反码.补码 带小数的原码.反码.补码 校验码:码距.奇偶校验码.海明码.循环冗余校验码(CRC) 指令的控制方式:顺序方式. ...
- 动态规划法——常见题型及算法思路
有关动态规划类问题本书不够入门,内容较严谨,不太适合小白,在此我将写下一些动态规划的基础思想(基础不代表简单,只是需要的前备知识少). 使用动态规划法求解整数拆分问题 下面是逻辑推理的过程(动态规划方 ...
- 动态规划法之蜘蛛侠救美记
前言 实验周的题目,使用动态规划法解决,感觉这个题目挺不错的.因为动态规划法用的不是很多,理解的也不是太透彻,所以把这道题目拿出来. 问题描述 章鱼博士绑架了蜘蛛侠的女友乔丹把她关在西塔上,蜘 ...
- A.关于图计算图学习的基础知识概览:前置知识点学习(Paddle Graph L)【一】
图学习图神经网络算法专栏简介:主要实现图游走模型(DeepWalk.node2vec):图神经网络算法(GCN.GAT.GraphSage),部分进阶 GNN 模型(UniMP标签传播.ERNIESa ...
- 算法设计与分析—— 动态规划法
原博客地址: https://www.cnblogs.com/brucemengbm/p/6875340.html 五大经常使用算法 之 动态规划法 一.基本概念 动态规划过程是:每次决策依赖于当前状 ...
- 数据算法算力知识反绎学习
2020 年 8 月 7 日,全球人工智能和机器人峰会(CCF-GAIR 2020)正式开幕.CCF-GAIR 2020 峰会由中国计算机学会(CCF)主办,香港中文大学(深圳).雷锋网联合承办,鹏城 ...
最新文章
- Angular系列学习二:基本的组件说明、自定义组件和部分细节说明
- 十张图了解2021年中国数据中心产业链投资现状和投资并购发展趋势
- EJB分布式对象实现方式描述
- 【python】详解类class的继承、__init__初始化、super方法
- hashmap另一种初始化
- Java step by step(3): Annotation
- 各种简单的困难的模板,持续更新
- C#巧妙实现服务器端应用程序和asp网页交互
- 人生之清单(list of life)
- PPT中均匀分布各图形(水平或垂直)
- 2019电商数据分析师实战项目教程 电商数据分析报告 电商运营数据分析 电商数据分析流程
- oracle+sql+groupby,oracle学习笔记2:SQL执行
- python爬取51job关于python的招聘信息
- php单例是什么意思,什么是PHP单例模式?
- 如果只能从市面上的Python入门书中选择一本送给你,那我一定会选这本……
- 【C语言】数组知识点总结
- 29 WebGL绘制立方体并为立方体每个表面指定颜色
- python-8 数据结构
- 【vue】vue网站设计----游戏导航网站
- KeyShot中材质该怎么分配
热门文章
- 英文学术会议参会必读-青年学者会议和演讲英语指南
- 第一页搜索送别谷歌中国……
- ACP复习—第3章 大数据计算服务MaxCompute
- 欧科云链2023年报:毛利达1.55亿港元,数字资产业务成最大增长点
- java中如何写一个注解
- 获取南京肯德基门店列表
- ORACLE存储过程运行报“ora-00942表或视图不存在”、“ORA-01031:权限不足”的解决方式
- 网贼横行,如何确保网络交易安全性?
- android动态波浪效果图,【炫酷】Android 波浪式扭曲侧边栏,窗帘(Curtain Menu)效果...
- 另眼来看《把信送给加西亚》