首页 > 编程语言 >算法——动态规划

算法——动态规划

时间:2023-06-26 09:13:56浏览次数:44  
标签:元素 算法 设计 动态 规划 DP

计算机归根结底只会做一件事:穷举
所有的算法都是在让计算机【如何聪明地穷举】而已,动态规划也是如此。

动态规划是自底向上,递归树是自顶向下
为什么动态规划一般都脱离了递归,而是由循环迭代完成计算。

【DP的核心思想】 
DP为什么会快? 
无论是DP还是暴力,我们的算法都是在可能解空间内,寻找最优解。来看钞票问题。暴力做法是枚举所有的可能解,这是最大的可能解空间。DP是枚举有希望成为答案的解。这个空间比暴力的小得多。  
也就是说:DP自带剪枝。DP舍弃了一大堆不可能成为最优解的答案。譬如:15 = 5+5+5 被考虑了。15 = 5+5+1+1+1+1+1 从来没有考虑过,因为这不可能成为最优解。
从而我们可以得到DP的核心思想:尽量缩小可能解空间。  
在暴力算法中,可能解空间往往是指数级的大小;如果我们采用DP,那么有可能把解空间的大小降到多项式级。一般来说,解空间越小,寻找解就越快。这样就完成了优化。

【DP的操作过程】 
一言以蔽之:大事化小,小事化了
将一个大问题转化成几个小问题;求解小问题;推出大问题的解。

【如何设计DP算法】  
下面介绍比较通用的设计DP算法的步骤。 
首先,把我们面对的局面表示为x。这一步称为设计状态。对于状态x,记我们要求出的答案(e.g. 最小费用)为f(x).我们的目标是求出f(T).找出f(x)与哪些局面有关(记为p),写出一个式子(称为状态转移方程),通过f(p)来推出f(x).

【DP三连】
设计DP算法,往往可以遵循DP三连:
我是谁? ——设计状态,表示局面  
我从哪里来?  我要到哪里去? ——设计转移  
设计状态是DP的基础。接下来的设计转移,有两种方式:

  • 一种是考虑我从哪里来(本文之前提到的两个例子,都是在考虑“我从哪里来”);
  • 另一种是考虑我到哪里去,这常见于求出f(x)之后,更新能从x走到的一些解。这种DP也是不少的,我们以后会遇到。 
    总而言之,“我从哪里来”和“我要到哪里去”只需要考虑清楚其中一个,就能设计出状态转移方程,从而写代码求解问题。前者又称pull型的转移,后者又称push型的转移。

区间动态规划
区间类动态规划是线性动态规划的扩展,它在分阶段地划分问题时,与阶段中元素出现的顺序和由前一阶段的哪些元素合并而来有很大的关系。
令状态 f(i,j) 表示将下标位置 i 到 j 的所有元素合并能获得的价值的最大值,那么 f(i,j)=max{f(i,k)+f(k+1,j)+cost},cost 为将这两组元素合并起来的代价。

以最后一个元素为终点的动态规划,若元素状态最大值可确定,可增加尾结点最大值,类似链表的默认头节点,方便处理。
分块动态规划,以最后一个元素为最后一块区间,和前面节点合并区间,动态规划。

参考链接
什么是动态规划(Dynamic Programming)?动态规划的意义是什么?
五大基本算法之动态规划算法
买卖股票的最佳时机 II
合并石头的最低成本

标签:元素,算法,设计,动态,规划,DP
From: https://www.cnblogs.com/sanguoasd/p/17189488.html

相关文章

  • m基于多属性决策判决算法的异构网络垂直切换matlab性能仿真,对比网络吞吐量,网络负载,
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要异构网络垂直切换是指在不同的移动通信网络之间进行快速自适应切换的技术。在异构网络中,不同类型的网络可能具有不同的带宽、延迟、信号强度等性能指标,因此在不同的应用场景下,需要采用不同的网络来实现最佳的通信......
  • 基于Logistic混沌序列的图像加解密算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要基于logistic混沌序列的图像加解密算法是一种基于混沌理论的加密算法,它通过混沌序列生成的随机数来改变图像的像素值,从而达到加密的目的。本文将详细介绍基于logistic混沌序列的图像加解密算法。混沌理论是指一类......
  • m基于多属性决策判决算法的异构网络垂直切换matlab性能仿真,对比网络吞吐量,网络负载,
    1.算法仿真效果matlab2022a仿真结果如下:      2.算法涉及理论知识概要       异构网络垂直切换是指在不同的移动通信网络之间进行快速自适应切换的技术。在异构网络中,不同类型的网络可能具有不同的带宽、延迟、信号强度等性能指标,因此在不同的应用场景......
  • 基于Logistic混沌序列的图像加解密算法matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:     2.算法涉及理论知识概要       基于logistic混沌序列的图像加解密算法是一种基于混沌理论的加密算法,它通过混沌序列生成的随机数来改变图像的像素值,从而达到加密的目的。本文将详细介绍基于logistic混沌序列的......
  • 回溯算法
    回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案。回溯法解决的问题组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按一定规则全排列,有几种排列方式棋盘问题:N皇后......
  • R语言K-Means(K均值聚类)和层次聚类算法对微博用户特征数据研究
    全文链接:https://tecdat.cn/?p=32955原文出处:拓端数据部落公众号本文就将采用K-means算法和层次聚类对基于用户特征的微博数据帮助客户进行聚类分析。首先对聚类分析作系统介绍。其次对聚类算法进行文献回顾,对其概况、基本思想、算法进行详细介绍,再是通过一个仿真实验具体来强化......
  • 最短路算法
    目录最短路算法单源最短路-迪杰斯特拉算法最短路算法单源最短路-迪杰斯特拉算法用于计算一个节点到其他所有节点的最短路径Dijkstra算法是贪心算法,是一种求解非负权图上单源最短路径的算法。基本思想是:设置一个顶点的集合S,并不断地扩充这个集合,当且仅当从源点到某个点的路......
  • 对算法的一些理解
    主要的算法思路有这几个:1、穷举2、动态规划3、分治4、贪心5、回溯6、分支限界这些算法思路之间是有区别和联系的。但是,很多文章没有把他们的区别和联系讲出来,这里尝试梳理一下。穷举是最朴素、最原始的思路。穷举就是把所有的可能一个一个列举出来,逐个分析后,再合并分析后......
  • 文心一言 VS 讯飞星火 VS chatgpt (47)-- 算法导论6.1 5题
    五、一个已排好序的数组是一个最小堆吗?文心一言:一个已排好序的数组不一定是一个最小堆。最小堆是一种特殊的二叉树,它满足以下性质:对于任意节点x,其父节点y的值都小于等于x的值。而一个已排好序的数组只是一个有序数组,它满足任意的元素都是按从小到大的顺序排列的,但并不一定满......
  • 文心一言 VS 讯飞星火 VS chatgpt (47)-- 算法导论6.1 5题
    五、一个已排好序的数组是一个最小堆吗?文心一言:一个已排好序的数组不一定是一个最小堆。最小堆是一种特殊的二叉树,它满足以下性质:对于任意节点x,其父节点y的值都小于等于x的值。而一个已排好序的数组只是一个有序数组,它满足任意的元素都是按从小到大的顺序排列的,但并不一定......