对比

  • 贪心(greedy):局部最优(local best),不保证全局最优
  • 穷举(exhaustive search)搜索:代价昂贵(prohibitive cost)

动态规划:是二者的综合平衡。因此,这是下一代的杰作。是贪心与穷举所生。

核心思想:可以编写定制的算法,系统的搜索全部的可能解(保证正确性:correctness),并且通过存储结果以避免重复计算(保证效率:efficiency)。

即,设计动态规划的算法,要考虑到这两个方面是否实施,也是验证算法是否完备的依据。

一旦真的理解了动态规划算法,那么它将称为你设计算法的绝招, 将是解决问题的最简洁方案,代码也非常优雅。体现了大道至简的哲学道理。

此外,理解了动态规划以后,很容易自己创造,而不用查书看标准写法,比如AVL树这种结构,不查书,找参考,手写出来很难,很难。

但是,不理解动态规划的思想,这类算法将像魔法一样,令人难以捉摸。

这提高了学习的门槛,一旦进入大门,将跨入新的层次。

缓存 v.s. 重新计算

http://blog.csdn.net/u011240016/article/details/52472315

这篇博客深入总结了基于Cache策略的斐波那契数列的计算方法,以及时间,空间优化的过程。

缓存的策略可以在任何递归算法中实现,但是以下几个常用算法不必实现:快速排序,回溯法,深度优先搜索。
不能用的原因是,我们存的数据被后面的过程查看取用才有价值,不被利用则没有价值。这些算法的参数都是不同的,因此,缓存没有必要,纯属浪费空间。

此外,要平衡缓存的代价与收益。在斐波那契的例子汇总,缓存的空间代价值O(n),解决的是指数问题,因此很值得。

—笔记总结自《算法设计手册》

动态规划--总体理解相关推荐

  1. 动态规划练习三:换钱问题(动态规划概念理解与记忆搜索法概念理解对比)

    题目描述 给定数组arr,数组中所有的值都为正数,且不为空不重复.数组中每个数代表一种货币的面值,每种面值的货币可以使用任意张,然后,给一个aim,代表要换钱的面值,请问,用数组中的面值换钱,总共有多 ...

  2. 动态规划的理解与案例分析

    动态规划的本质 常用的五大算法,包含 动态规划.分治法.贪心求解法.回朔法.分支限界法. 动态规划(Dynamic Programming),与其说是一种算法,不如说是一种解决问题的思路. :peac ...

  3. 【算法基础】动态规划的理解

    本章是个很有趣的问题,也是难倒很多人的问题,同时这又是个会而不难的问题. 动态规划的核心逻辑是:将问题分解为子问题.在<算法图解>这本书里,深入浅出得讲了递推公式的推演逻辑,但是在关键部分 ...

  4. python的整体设计目标_python之总体理解

    作为脚本,python具备了弱类型语言的灵活性,便捷性.这在日常的开发使用中能够大幅度的减轻开发人员的编码负担,开发者也能够将精力集中在程序的逻辑管理和总体构架设计上.一般而言,随着经验的积累,开发人 ...

  5. 动态规划再理解(53、121、174)

    本次文档也是对动态规划的 再认识 . 之前写过一些文章,在处理动态规划问题的时候依据的思路是 :暴力搜索->加缓存->动态规划.相关文章有:算法八--动态规划,动态规划--0-1背包问题, ...

  6. 动态规划的理解(DP)

    动态规划(DP) 文章目录 动态规划(DP) 1.动态规划概念 2.最短路径问题 3.动态规划和分治区别 4.为什么动态规划往往从后往前? 1.动态规划概念 在现实生活中,有一类活动的过程,由于它的特 ...

  7. Java项目结构的总体理解

    本文简单记录了一下自己对java项目各个层的理解. (清理笔记,hhh) 新版编辑器既好用又不好用,哎,第一次发布的序号都被打乱了.

  8. 【计算机视觉】Objectness算法(一)---总体理解,整理及总结

    1.源码下载及转换为VS2012 WIN32版本. http://www.cnblogs.com/larch18/p/4560690.html 2.原文: http://wenku.baidu.com ...

  9. 对比学习simSiam(一)--Exploring Simple Siamese Representation Learning总体理解

    1.从名字上把握 sim是我们熟知的相似的那个单词,这个Siam是孪生的意思,这里使用这个来命名应该是为了指出孪生的重要性.这里的核心其实是在提出一个思想,对比学习这种由孪生网络结构构成的无监督学习的 ...

最新文章

  1. 位运算和典型应用详解
  2. python编程怎么做游戏主播_如何成为一名成功的编程主播?
  3. 神经网络变学习率算法代码_机器学习算法之神经网络
  4. 编写Nginx启停服务脚本
  5. sap.ca.ui.utils.busydialog - scenario1 - opportunity opened
  6. MySQL主键自增长报duplicate_MySQL使用on duplicate key update引起主键不连续自增
  7. java连接zookeeper 找不到zoo.cfg_ZooInspector 连接不到 Zookeeper 的解决方法
  8. Node中POST请求的正确处理方式
  9. php与XML、XSLT、Mysql的结合运用 (转载)
  10. uni-app uniCloud 前端操作数据库 模糊查询
  11. Magento国家代码缩写
  12. 平价的蓝牙耳机哪家质量好?学生党公认的五款高品质蓝牙耳机
  13. Latex常用公式写法(一)
  14. 查看计算机ip地址配置信息的命令是,查看电脑配置指令大全
  15. 5款支持Web端创作的脑图工具,学习一款就够了
  16. 关于 redux-thunk 的作用,认识,理解
  17. QGIS 3.10 矢量样式设置
  18. 添加微软自带日文输入方法
  19. 前端开发如何配置一个新电脑 VScode
  20. 入会领京豆Python脚本

热门文章

  1. wildfly10 配置mysql_WildFly配置MySql驅動
  2. mysql int 长度 范围_mysql int(M) M意义 和int长度
  3. 多个select count 合并_Milvus查询合并机制
  4. python输出隔4个字符_python怎么实现每隔几个字符分割
  5. sql 求相交的行_SQL相交
  6. angularjs双向绑定_AngularJS隔离范围双向绑定示例
  7. tts文字转语音_Android文字转语音(TTS)
  8. Spring WebFlux – SpringReact式编程
  9. C++ 取得系统当前时间
  10. C++访问WebService