动态规划 —— 动态规划概述
【概述】
- 动态规划:解决多阶段决策问题的一种方法。实际上就是一种排除重复计算的算法,更具体的说,动态规划就是用空间换取时间。
- 多阶段决策问题:若一类问题的求解过程可分为若干个互相联系的阶段,在每一个阶段都需作出决策,并影响到下一个阶段的决策。这类问题的解决,就是要在可以选择的那些策略间,选一个最优策略,使在预定的标准下达到最好的效果。
- 阶段:将所给求解问题的过程恰当地分成若干个相互联系的阶段,以便于求解,过程不同,阶段数就可能不同,描述阶段的变量称“阶段变量”。
- 状态:描述事物的性质,不同事物有不同的性质,因而用不同的状态来刻画。对问题的求解状态的描述是分阶段的。描述状态的量称“状态变量”
- 决策:一个阶段的状态给定以后,从该状态演变到下一阶段某个状态的选择性操作。描述决策的变量称决策变量。决策变量的范围称“允许决策集合”。
- 无后效性:我们要求状态具有下面的性质:如果给定某一阶段的状态,则在这一阶段以后过程的发展不受这阶段以前各段状态的影响,所有各阶段都确定时,整个过程也就确定了。换句话说,过程的每一次实现可以用一个状态序列表示,这个性质称为“无后效性”。
- 策略:由每个阶段的决策组成的序列称为策略。对于每一个实际的多阶段决策过程,可供选取的策略有一定的范围限制,这个范围称“允许策略集合”。允许策略集合中达到最优效果的策略称“最优策略”。
- 状态转移方程:用数学公式描述与阶段相关的状态间的演变规律。是本阶段的状态往往是上一阶段状态和上一阶段决策的结果。如果给定了第K阶段的状态Sk以及决策uk(Sk),则第K+1阶段的状态Sk+1也就完全确定。
【最优性原理】
- 不论初始状态和第一步决策是什么,余下的决策相对于前一次决策所产生的新状态,构成一个最优决策序列。
- 最优决策序列的子序列,一定是局部最优决策子序列。
- 包含非局部最优的决策子序列,一定不是最优决策序列。
【无后效性原则】
- 某阶段的状态一旦确定,则此后过程的演变不再受此前各状态及决策的影响。
- 当前状态是此前历史的一个完整的总结,此前的历史只能通过当前的状态去影响过程未来的演变。
【指导思想】
- 在做每一步决策时,列出各种可能的局部解。
- 依据某种判定条件,舍弃那些肯定不能得到最优解的局部解。
- 以每一步都是最优的来保证全局是最优的。
【基本特征】
- 问题具有多阶段决策的特点。
- 每一阶段都有相应的“状态”与之对应。
- 每一阶段都面临一个决策,选择不同的决策将会导致下一阶段不同的状态。
- 每一阶段的最优解问题可以递归地归结为下一阶段各个可能状态的最优解问题,各子问题与原问题具有完全相同的结构。
【一般解题步骤】
- 判断问题是否具有最优子结构性质,若不具备则不能用动态规划
- 把问题分成若干个子问题(分阶段)
- 建立状态转移方程(递推公式)
- 找出边界条件
- 将已知边界值带入方程
- 递推求解
【问题分类】
- 背包问题:点击这里
- 线性 DP:点击这里
- 区间 DP:点击这里
- 状压 DP:点击这里
- 数位 DP:点击这里
- 树型 DP:点击这里
动态规划 —— 动态规划概述相关推荐
- 【算法】动态规划 ④ ( 动态规划分类 | 坐标型动态规划 | 前缀划分型动态规划 | 前缀匹配型动态规划 | 区间型动态规划 | 背包型动态规划 )
文章目录 一.动态规划场景 二.动态规划分类 1.坐标型动态规划 2.前缀划分型动态规划 3.前缀匹配型动态规划 4.区间型动态规划 5.背包型动态规划 一.动态规划场景 动态规划 动态规划使用场景 ...
- Python实现采药问题(+动态规划简单概述)
题目描述 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞里对他说:" ...
- 【转载】通过金矿模型介绍动态规划 (动态规划入门)
先附上原文地址:http://www.cnblogs.com/sdjl/articles/1274312.html 通过金矿模型介绍动态规划 对于动态规划,每个刚接触的人都需要一段时间来理解,特别是第 ...
- 【算法】动态规划 ① ( 动态规划简介 | 自底向上的动态规划示例 | 自顶向下的动态规划示例 )
文章目录 一.动态规划简介 二.自底向上的动态规划示例 1.原理分析 2.算法设计 3.代码示例 三.自顶向下的动态规划示例 1.算法设计 2.代码示例 一.动态规划简介 动态规划 , 英文名称 Dy ...
- C语言采药动态规划,动态规划_POJ1775:采药
3----------------------------------------------------------------------------小半年没写DP了,连个01背包都不会写了... ...
- 《算法导论》中动态规划求解钢条切割问题
动态规划算法概述 动态规划(dynamic programming)1是一种与分治方法很像的方法,都是通过组合子问题的解来求解原问题.不同之处在于,动态规划用于子问题重叠的情况,比如我们学过的斐波那契 ...
- 算法题解:动态规划解0-1背包问题
概述 背包问题(Knapsack problem)是一种组合优化的NP完全问题.问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高.问 ...
- 动态规划算法解决背包问题
一.动态规划算法概述 动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从子问题解得到原问题解. 但是经分解得到的子问题往往不是互相独立的.不同子问题的数目常常 ...
- LeetCode 10. Regular Expression Matching python特性、动态规划、递归
前言 本文主要提供三种不同的解法,分别是利用python的特性.动态规划.递归方法解决这个问题 使用python正则属性 import reclass Solution2:# @return a bo ...
最新文章
- 罗斯霍曼理工学院计算机毕业生,全美最强STEM大学,了解一下?
- 帮助你高效开发Ajax应用的超酷jQuery插件 - AjaxML
- python删除word表格中的某一行_python docx删除word段落
- 解决orcale报ORA-28001: the password has expired
- linux系统md5sum命令用不了,Linux中md5sum命令起什么作用呢?
- python——pandas数据分析(表格处理)工具实现Apriori算法
- 使用Movavi Photo Editor如何修复照片中的红眼
- 操作系统-存储器管理
- linux卸载nvidia驱动
- 如何在远程会议的时候静音吃薯片?微软团队用AI去除视频噪声
- Android USB打印机
- 用java编写注册界面_java编写一个注册界面的方法
- 项目管理:精益管理法
- 苹果macbookpro多少钱_买一套可用的苹果全家桶,要花多少钱?
- 在word中在方框里打钩
- 微信小程序如何做营销推广?
- idea mybatis 常用插件
- 以下是根据在下的一些朋友芳名作诗,请朋友指点,继续增加中
- 描述并简要比较TCP/IP协议体系及0SI/RM协议体系
- CentOS8(8.2)安装mysql8
热门文章
- 身高2m,体重2kg,这样的数据“看上去很好”?
- php 数组随机排序_php 数组元素随机排序代码
- Chrome 100发布:全新图标,CPU、内存占用暴降!
- 这样的问题代码,我实习的时候都写不出来!
- 这些工具类用起来真的很”香“
- 消息队列 ActiveMQ 、RocketMQ 、RabbitMQ 和 Kafka 如何选择?
- 阿里云+HCT双证认证,架构师年薪达不到25.6万全额退款
- Java Class的热替换 自定义ClassLoader加载.class
- JEECG 社区官方技术支持
- 第41章 实施数据库审计