转载请标明地址或者附上我的博客地址https://georgedage.blog.csdn.net/

前言

最近接了一个项目,有关动态规划,客户提到,动态规划能和spark结合在一起吗?看来或许他对动态规划不是很熟悉,当然,我也不能说自己对其了如指掌,但是我们熟知,当我们说起动态规划的时候,往往是说的动态规划算法。既然是算法,那么它是可以运用到我们的程序中的,当然,前提业务需要,系统需要。

什么是动态规划?

在百度百科中,是这样解释动态规划的:

动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。1957年出版了他的名著《Dynamic Programming》,这是该领域的第一本著作。

好像听起来是有点繁琐,当然要这样,这样你就觉得他是比较高大上的了,就像最近《安家》电视剧中所说的——折衷主义,其实不就是混搭吗?那么我们在这高大上的概念中,怎么去理解它呢?

也就是说它的核心问题在哪?关键是什么?

其实坦白来说,动态规划问题的一般形式就是求最值。上面说到动态规划其实是运筹学的一种最优化方法,只不过在计算机问题上应用比较多,比如说让你求最长递增子序列呀,最小编辑距离呀等等。

既然是要求最值,核心问题是什么呢?求解动态规划的核心问题是穷举。因为要求最值,肯定要把所有可行的答案穷举出来,然后在其中找最值。

在百度百科对动态规划的概念意义中,一句话吸引了我,是这样说的:动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。不像搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。因此读者在学习时,除了要对基本概念和方法正确理解外,必须具体问题具体分析处理,以丰富的想象力去建立模型,用创造性的技巧去求解。我们也可以通过对若干有代表性的问题的动态规划算法进行分析、讨论,逐渐学会并掌握这一设计方法。

这也就是我起这个标题的原因,DP实际意义上说是一个方法,并非一个算法!!

所以说当我们设计程序的时候,特别对于数据进行分析的时候,我们难免的会有求topN的请求,数据量小还好,当数据量大的时候,我们是不是要考虑到运用一些设计方法,一些算法,或者对系统进行调优。映射到我们设计的软件也是如此,当一个系统不断地增加功能,不断地有用户的涌进时,是不是要对系统进行优化,或者为了系统的 后期维护和整体代码的复用性,我们是不是要在编写系统的时候运用到一些设计模式。道理是相通的!

当然说这么点,有点针对前言的一个解释。下面以一些简洁的话语对DP进行解释:假设你正在使用适当的输入数据进行一些计算。你在每个实例中都进行了一些计算,以便得到一些结果。当你提供相同的输入时,你不知道会有相同的输出。这就像你在重新计算之前已经计算好的特定结果一样。那么问题出在哪里呢?你之前计算某些结果的宝贵时间被浪费掉了。你可以通过保存之前的计算结果去轻易地解决这个问题。比如通过使用恰当的数据结构。举个例子,你可以将输入输出作为键值对映射保存起来。现在通过分析这个问题,我们可以将新的输入(或者不在数据结构中的输入)与其对应的输出存储下来。或者在字典中查找输入并返回相应的输出结果。这样当你在进行一些计算时,你可以检查数据结构中是否存在该输入,如果数据输入存在的话就可以直接获得结果。我们将与这种方法相关的技巧称作动态规划。

一句话解释就是:我们可以说动态规划主要用来解决一些希望找到问题最优解的优化问题。

网上有不少运用动态规划的算法介绍,这里就不过多叙述。希望本篇让你对这个高大上的DP有认识上的一点见解。后期有空再更关于DP的运用!

参考:
https://baijiahao.baidu.com/s?id=1635388976060265522&wfr=spider&for=pc
百度百科

浅谈一下这个所谓的特殊算法——动态规划?相关推荐

  1. 浅谈深度学习的基础——神经网络算法(科普)

    浅谈深度学习的基础--神经网络算法(科普) 神经网络算法是一门重要的机器学习技术.它是目前最为火热的研究方向--深度学习的基础.学习神经网络不仅可以让你掌握一门强大的机器学习方法,同时也可以更好地帮助 ...

  2. 浅谈自适应滤波器---(快速RLS算法)

    在上一篇博客中(浅谈自适应滤波器)我给大家介绍了关于自适应滤波器的一些入门级的知识,并分析了常规RLS算法单次迭代的计算量级为O[N2],当阶数N增大时相应的计算量显著增大,为了将计算量级降低到O[N ...

  3. 浅谈对主成分分析(PCA)算法的理解

    PCA(Principal Component Analysis)是一种常用的数据分析方法.PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降 ...

  4. 【论文导读】浅谈胶囊网络与动态路由算法

    前言 "Dynamic Routing Between Capsules"是由Hinton等联合发表在NIPS会议上.提出了一个新的神经网络---胶囊网络与囊间的动态路由算法. 上 ...

  5. 欧拉回路/路径浅谈(七桥问题,两种算法)

    文章目录 前言 引子 欧拉回路/路径 定义 欧拉路径 欧拉回路 无向图(连通) 欧拉回路-无向 欧拉路径-无向 有向图(连通) 欧拉回路-有向 欧拉路径-有向 注意事项 算法 Fluery算法 Hie ...

  6. 浅谈最广泛应用的金融风控算法-评分卡

    背景 信用是一切社会金融体系的根本,有了每个人的信用我们才可以进行放贷.共享充电宝.共享单车等业务.如果可以准确的给每个社会成员的信用做一个打分,将对金融业务的推进有很大作用,很多相关业务的企业也在探 ...

  7. ltv价值 应用_浅谈LTV模型的概念、算法及作用意义

    本帖最后由 图样图森破 于 2013-11-14 09:11 编辑 LTV 概念 用户终身价值(life time value)解释 LTV是在一定时间内,某一客户可能为企业带来的利润额. 顾客终身价 ...

  8. 浅谈PHP编写杨辉三角算法

    PHP编写杨辉三角算法如下: <?php function test($n) {for ($i=1;$i<$n;$i++) {for ($j=1;$j<=$i;$j++) {if ( ...

  9. 浅谈网络流的基本算法

    引言 过去听起来高深莫测的网络流算法,现在已飞入寻常百姓家了,对于每一个OIER,网络流是一个神圣的东西(个人见解),但神圣的同时,它并不是那样抽象,最形象的模型就是水流,从长江源点无限的向外流水,而 ...

最新文章

  1. f-fdisk做磁盘分区,起始扇区从2048块开始
  2. CF715B. Complete The Graph
  3. 老旧的金融机构,是时候赶赶云计算的时髦了
  4. 策略梯度训练cartpole小游戏
  5. Python 处理带中文 Excel 文件
  6. Node中使用mysql模块遇到的问题
  7. mysql pdo 插入没效果_MySQL分库分表后用PHP如何来完美操作
  8. python爬去segementfault上的博客文章
  9. bzoj 1911: [Apio2010]特别行动队【斜率优化dp】
  10. easyui combobox自动搜索提示功能
  11. Oracle 闪回特性(Flashback Query、Flashback Table)
  12. 给新安装的RHEL8虚拟机 安装 vmware tools
  13. linux 定时关机命令,linux 定时关机命令
  14. 新版标准日本语中级_第八课
  15. SuperMemo POJ - 3580
  16. 【提供代码获取方式】matlab使用风羽法画大气环流
  17. php配置上传pdf文件大小,文件上传有大小限制?PDF文件怎么压缩到指定大小?
  18. docker 镜像制作
  19. eclipse 自带git插件 文件提交后修改标志不明显
  20. 用itchat导入微信好友信息并保存(详细)简单易懂

热门文章

  1. 使用分析函数进行行列转换
  2. HDU - 3126 Nova(最大流+二分+简单几何)
  3. CH - 6802 車的放置(二分图最大匹配)
  4. BZOJ2806(后缀自动机+DP)
  5. [bzoj5405]platform
  6. HTTP 2.0 协议
  7. boost.asio系列——io_service
  8. 数据结构与算法 | 堆排序
  9. 阿里二面:你来设计一下 Flink 性能调优?
  10. OS- -请求分页系统、请求分段系统和请求段页式系统(二)