栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

DP入门(c++)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

DP入门(c++)

动态规划

在学习动态规划之前,

我们必须要先掌握记忆化搜索和递推,这两块东西搞好了之后,面对动态规划那就容易多啦!

动态规划(英语:Dynamic programming,简称 DP),

通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。

(是不是很像前面讲解过的一种算法——分治,其实可以认为动态规划就是特殊的分治)

动态规划常常适用于有无后效性和最优子结构性质的问题,

并且记录所有子问题的结果,因此动态规划方法所耗时间往往远少于暴力递归解法。

使用动态规划解决的问题有个明显的特点,

一旦一个子问题的求解得到结果,

以后的计算过程就不会修改它,这样的特点叫做无后效性,

动态规划有自底向上和自顶向下两种解决问题的方式。自顶向下即记忆化搜索,

自底向上就是递推。

做题方法

(1)划分阶段:

按照问题的时间或空间特征,把问题分为若干个阶段。

在划分阶段时,注意划分后的阶段一定要是有序的或者是可排序的,否则问题就无法求解。

   (2)确定状态和状态变量:

将问题发展到各个阶段时所处于的各种客观情况用不同的状态表示出来。

当然,状态的选择要满足无后效性。

 (3)确定决策并写出状态转移方程:

因为决策和状态转移有着天然的联系,

状态转移就是根据上一阶段的状态和决策来导出本阶段的状态。

所以如果确定了决策,状态转移方程也就可写出。

但事实上常常是反过来做,根据相邻两个阶段的状态之间的关系来确定决策方法和状态转移方程。

 (4)寻找边界条件:

给出的状态转移方程是一个递推式,需要一个递推的终止条件或边界条件。

  一般,只要解决问题的阶段、状态和状态转移决策确定了,

就可以写出状态转移方程(包括边界条件)。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1001483.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号