动态规划=分治(不是等分,是多阶段)+避免重复计算

是一个多阶段决策问题

核心是状态和状态转移方程

数字三角问题(单向无环最长/最短路径问题):

现有一张地图,各结点代表城市,两结点间连线代表道路,线上数字表示城市间的距离。如图所示,试找出从结点A到结点E的最短距离

递推公式(状态转移方程):

 递归

如果用递归的方法,独立性太强而这种dp问题各个阶段之间具有联系,如果用递归就会有大量的重复计算(不仅仅是某个节点的重复而是这个节点的子树的重复计算)

为了避免重复计算,我们应该把已经得到的结果保留下来。将计算变为查询,用空间换取时间。

下面给出两种实现思路:

递推:使用递推公式,由底向顶填表

记忆化搜索(保证每个节点只访问一次也是需要记录)

数学模型

动态规划模型的基本要素

1.阶段
阶段(step)是对整个过程的自然划分。通常根据时间顺序或空间特征来划分阶段,以便按阶段的次序解优化问题。阶段变量一般用k=1,2,..,n表示。

2.状态
状态(state)表示每个阶段开始时过程所处的自然状况。它应该能够描述过程的特征并且具有无后向性,即当某阶段的状态给定时,这个阶段以后过程的演变与该阶段以前各阶段的状态无关,即每个状态都是过去历史的一个完整总结。通常还要求状态是直接或间接可以观测的。
描述状态的变量称状态变量(state variable)。变量允许取值的范围称允许状态集合(set of admissible states)。用xk表示第k阶段的状态变量,它可以是一个数或一个向量。用Xk表示第k阶段的允许状态集合。在引言的例子中x2可取B1,B2,X2={B1,B2}。
n个阶段的决策过程有n+1个状态变量,xn+1表示xn演变的结果

3.决策
 当一个阶段的状态确定后,可以作出各种选择从而演变到下一阶段的某个状态,这种选择手段称为决策(decision) 。
 描述决策的变量称决策变量(decision variable)。变量允许取值的范围称允许决策集合(set of admissible decisions)。用uk(xk)表示第k阶段处于状态xk时的决策变量,它是xk的函数,用Uk(xk)表示了xk的允许决策集合。在引言的例子中u2(B1)可取C1,C2,C3。决策变量简称决策。

4.策略
决策组成的序列称为策略(policy)。由初始状态x1开始的全过程的策略记作p1n(x1),即p1n(x1)={u1(x1),u2(x2),...,un(xn)}。由第k阶段的状态xk开始到终止状态的后部子过程的策略记作pkn(xk),即pkn(xk)={uk(xk),uk+1(xk+1),...,un(xn)}。类似地,由第k到第j阶段的子过程的策略记作pkj(xk)={uk(xk),uk+1(xk+1),...,uj(xj)}。对于每一个阶段k的某一给定的状态xk,可供选择的策略pkj(xk)有一定的范围,称为允许策略集合(set of admissible policies),用P1n(x1),Pkn(xk),Pkj(xk)表示。

5.状态转移方程
在确定性过程中,一旦某阶段的状态和决策为已知,下阶段的状态便完全确定。用状态转移方程(equation of state)表示这种演变规律,写作:

引言中例子的状态转移方程为:xk+1=uk(xk)

6.指标函数和最优值函数 

指标函数(objective function)是衡量过程优劣的数量指标,它是关于策略的数量函数,从阶段k到阶段n的指标函数用Vkn(xk,pkn(xk))表示,k=1,2,...,n。

能够用动态规划解决的问题的指标函数应具有可分离性(可以将大问题分解为子问题),即Vkn可表为xk,uk,Vk+1 n的函数,记为:(可以看出来这个结构是递归的)

动态规划算法的基本步骤

1.分析最优解的性质,并刻划其结构特征。 (无后向性)
2.递归地定义最优值。
3.以自底向上的方式或自顶向下的记忆化方法(备忘录法)计算出最优值。
4.根据计算最优值时得到的信息,构造最优解。

第九章 (一)动态规划相关推荐

  1. 算法 【第九章】动态规划问题

    动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推的方式去解决. 动态规划的核心点:定义状态与转移方程(最优子结构) 重新定义问题: 一.最长上升子序列(LIS):给定一个序 ...

  2. 代码随想录算法训练营第五十二天_第九章_动态规划 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

    LeetCdoe 121. 买卖股票的最佳时机 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择 某一天 买入这只股票,并选择在 未 ...

  3. 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...

  4. 机器学习-第九章 聚类

    机器学习-第九章 聚类 D系鼎溜已关注 2020.02.19 10:36:17字数 3,312阅读 375 9.1 聚类任务 在无监督学习任务中,包括了密度估计.异常检测以及聚类等.其中应用最广泛的是 ...

  5. 【Vue.js 牛刀小试】:第九章 - 组件基础再探(data、props)

    系列目录地址 一.基础知识概览 第一章 - 一些基础概念(posted at 2018-10-31) 第二章 - 常见的指令的使用(posted at 2018-11-01) 第三章 - 事件修饰符的 ...

  6. 【机器学习实战 第九章】树回归 CART算法的原理与实现 - python3

    本文来自<机器学习实战>(Peter Harrington)第九章"树回归"部分,代码使用python3.5,并在jupyter notebook环境中测试通过,推荐c ...

  7. C#程序设计笔记(第九章)

    第九章    接口 1.理解接口和类的区别: a)类是具有属性和在这些属性上操作的方法的集合 b)接口是定义行为特性或能力,并在类中应用这些行为,而不管类层次如何 c)它们之间最大的区别就是类不可以多 ...

  8. 计算机软件基础操作,计算机软件基础 第九章 Excel基本操作(1页)-原创力文档...

    第九章 Excel基本操作 历年考点分布 2005A 2005B 2006A 2006B 2007 2008 2009 2010 工作簿.工作表.单元格的基本概念 3 1 1 2 1 工作表的编辑 4 ...

  9. vim实用技巧-笔记(第九章)

    vim实用技巧-笔记(第九章) 前言 我记得很早以前我就说过了,我是一个菜鸟,我写博客的主要目的不是为了别人,更多的是为了记录自己的成长过程.如果阁下认为我的行为是在划水的话,那我也不妨大方地承认. ...

  10. 开发日记-20190915 关键词 汇编语言王爽版 第九章

    第九章 转移指令的原理 可以修改IP或同事修改CS和IP和指令统称为转移指令.概括地讲,转移指令就是可以控制CPU执行内存中某处代码的指令. 8086CPU的转移行为有以下几类: 只修改IP时,称为段 ...

最新文章

  1. [转化率预估-1]引言
  2. 一行代码轻松实现拖动效果
  3. 华华和月月种树(牛客)
  4. 2018宁夏邀请赛 - Copy and Submit II(推公式)
  5. 王盛:QUIC让B站在20%丢包时实现零卡顿
  6. 用函数实现simulink_VCU/BMS基于模型的开发---Simulink 代码集成
  7. 我的SWT与数字图像处理总结(3)—SWT如何得到图像某个位置的像素值和相应的RGB的值...
  8. ftp 服务器创建访问连接抱错_如何用固定IP连接FTP服务器?
  9. ARDUINO使用GPRS发送GPS数据到OneNet测试
  10. 《Android App开发入门与项目实战》资源下载和内容勘误
  11. JAVA-map转换json异常
  12. 为Eclipse安装ADT插件
  13. qpython3电脑版下载_qpython3官方版下载
  14. Java小游戏中加背景音乐--有图有真相
  15. 电脑开的热定手机连不上解决方法
  16. directx 11 64位
  17. 复杂sql语句:按部门统计人数
  18. LAL-开源Go语言音视频流媒体服务器
  19. Java输出流FileOutputStream使用详解
  20. k8s---存储之Volumes配置管理

热门文章

  1. T7315 yyy矩阵折叠(长)
  2. spring quartz执行两次问题
  3. 前端学HTTP之网络基础
  4. GUI编程(一)-----概述
  5. WebBrowser填充表单值的问题.
  6. 算法导论8-5习题解答(平均排序)
  7. 深入理解strcpy,strncpy
  8. 航海王启航服务器维护要多久,《航海王启航》7月1日服务器更新维护公告
  9. 拓端tecdat|基于数据挖掘SVM模型的pre-incident事故预防预测分析报告
  10. java 建立缓存_java动态缓存——创建一个简单的缓存