谈谈动态规划的本质

前言

在上一篇文章动态规划的文章中,我们先由 Fibonacci 例子引入到了动态规划中,然后借助兑换零钱的例子,分析了动态规划最主要的三个性质,即:

  1. 重叠子问题
  2. 最优子结构
  3. 状态转移方程

但是动态规划远不止这么简单。

今天这篇文章,让我们深入动态规划,一窥动态规划的本质。

我们既然要彻底搞清楚动态规划,那么一个不可避免的问题就是:

递归,贪心,记忆化搜索和动态规划之间到底有什么不同?

  • 动态规划递归 :只是单纯的空间换时间吗? 并不是,斐波那切数列的例子很好的推翻了这个观点。

  • 动态规划贪心:只是贪心的加强版吗?并不是,零钱兑换的例子同样推翻了这个观点。

那么,动态规划的核心到底是什么?

要回答这个问题,我们不妨先回答下面这个问题:

到底哪些问题适合用动态规划即?怎么鉴定 DP 可解问题?

相信当我们认识到哪些问题可以用 DP 解决,我们也就自然找到了 DP 和其它算法思想的区别,也就是动态规划的核心。

动态规划核心

首先我们要搞清楚,动态规划只适用于某一类问题,只是某一类问题的解决方法。

那么这“某一类问题”是什么问题呢?

聊这个之前我们有必要稍微了解下计算机的本质。

基于冯诺依曼体系结构的计算机本质上是一个状态机,为什么这么说呢?因为 CPU 要进行计算就必须和内存打交道。

因为数据存储在内存当中(寄存器和外盘性质也一样),没有数据 CPU 计算个空气啊?所以内存就是用来保存状态(数据)的,内存中当前存储的所有数据构成了当前的状态,CPU 只能利用当前的状态计算下一个状态

我们用计算机处理问题,无非就是在思考:如何用变量来储存状态,以及如何在状态之间转移:由一些变量计算出另一些变量&#x

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值