首页 > 其他分享 >如何理解动态规划

如何理解动态规划

时间:2022-12-23 18:02:54浏览次数:38  
标签:状态 递归 问题 理解 杨辉三角 动态 规划

一、动态规划三板斧

  • 状态转移公式
  • 循环 或 递归
  • 性能优化

二、WHY

1、状态转移公式

动态规划与分治不一样,分治的问题是相互独立的,而动态规划的各个状态是有关联关系的。比如背包问题,你选择了 i 物品之后,背包的剩余容量要发生变化吧,对装别的物品就有影响了。

状态转移公式就是刻画这种关联的,一旦知道了这种关系,就可以道生一,一生二,二生三,三生万物了。

怎么生万物呢?

靠循环。

2、循环&递归

为了穷尽所有可能。

值得注意的是:循环一般是从前往后思考,而递归往往是从后往前考虑。

3、性能优化

正是要穷尽所有可能,动态规划的时间复杂度通常是指数级的,性能很差。动态规划还有维度爆炸的问题,就是当考虑的维度过多时,穷尽不过来了。因此一定要做性能优化,最经典的方式就是以空间换时间。

总结来说:

动态规划,就是用状态转移公式建立关系,用循环穷尽所有可能,最后捡出符合的答案。

三、HOW

如何运用这三板斧?

1、找到状态转移公式

① 借助几何图形看关系

比如背包问题中,列出表格;找零问题中,建立树形图;杨辉三角问题,画出杨辉三角。

不要小看列表格的过程。

不要小看列表格的过程。

不要小看列表格的过程。

我一开始觉得看看别人列的表格就行了,后来才发现列表格的过程就是理解动态规划的开始。

不要动眼不动手。

② 确定问题维度

一维问题,一个参数就能表示,比如爬楼问题状态用 f ( n )就能表示。二维问题,比如杨辉三角问题,用 f ( x, y )表示一个节点状态。

③ 确定边界条件

边界条件是你递归的出口,或者循环的起点。下面几种是常见的边界调节-

x === 1  return ...
y <= 0 return ...

④ 列出状态转移公式和边界条件

2、循环/递归

要递归的内容,和递归的出口,上一步已经定好了。这里直接拿来用就行了。

3、性能优化

递归时,很容易导致重复计算。这时用空间换时间,将计算过的状态储存起来,然后也作为递归的出口,碰到计算过的数据,直接取值即可。

四、如何入门动态规划

思想是无形的,动态规划尤其细腻、微妙,要用有形来攻无形。可以联系下面几道经典题目,能帮助你学习无形的思想。

由浅到深:

  • 斐波那契数列
  • 爬楼梯问题
  • 机器人走方格问题
  • 杨辉三角(变形)问题
  • 01背包问题
  • 找硬币问题

等你深入理解这些问题之后,会发现它们有着很多相似处,有的更是相互的变形。然后你对动态规划就会有更立体的认识,而且会体会到其中的乐趣。

编辑于 2021-10-25 10:16

标签:状态,递归,问题,理解,杨辉三角,动态,规划
From: https://www.cnblogs.com/shoshana-kong/p/17001255.html

相关文章

  • 看一遍就理解:动态规划详解
    前言我们刷leetcode的时候,经常会遇到动态规划类型题目。动态规划问题非常非常经典,也很有技巧性,一般大厂都非常喜欢问。今天跟大家一起来学习动态规划的套路,文章如果有......
  • 什么是动态规划(Dynamic Programming)?动态规划的意义是什么?
     链接:https://www.zhihu.com/question/23995189/answer/613096905来源:知乎0.intro很有意思的问题。以往见过许多教材,对动态规划(DP)的引入属于“奉天承运,皇帝诏曰......
  • 深入理解Kafka核心设计-日志存储
    一、文件系统中存储方式1.1树形结构图1.2目录结构【分而治之】一个topic有多个分区,一个分区就是一个Log(文件夹),文件夹命名方式:<topic>-<partition>如创建订单topic:CRE......
  • 上干货 | 园区智慧物联管理解决方案
    园区智能化管理,包括设备、照明、多媒体、水电燃气能耗、环境监测、安防等多个维度的管理工作,在数据采集和智能化管理方面存在如下问题:1、数据采集孤立,系统联......
  • setData 如何修改动态数据
    setData如何修改动态数据list[{name:'张三',age:18},{name:'李四',age:24},{name:'王五',age:14}]先用字符串拼接,然后再更改,其中index是动态获取的数......
  • SpringBoot2.x系列教程48--多数据源配置之AOP动态切换数据源
    SpringBoot2.x系列教程48--多数据源配置之AOP动态切换数据源作者:一一哥在上一节中,我通过分包的方式实现了多数据源的配置,接下来我通过AOP切面的方式,带领大家实现第二种多数......
  • CAD动态块缩放的特性详解
    CAD动态块相信大家都不陌生,那么,你知道CAD动态块缩放特性吗?不知道也没关系,本文我们将以浩辰CAD软件为例来给大家分享一下利用XY参数与缩放动作配对的实例来说明CAD动态块......
  • CAD动态块操作实例:CAD图块线性缩放
    CAD动态块是指通过对CAD图块进⾏⼀系列的自定义设置,如:参数、动作等,使其按照设计师的需求进⾏可变的参数化调整。本文小编就以CAD图块线性缩放为例来给大家简单介绍一下CAD......
  • 浅谈电动汽车充电桩建设现状及规划方案
    0引言  随着能源转型步伐的加快,我国经济由高速发展迈向高质量发展。“十三五”以来,全省将节能、削煤、降碳与调结构、治污染、惠民生相结合,实施能耗总量与强度双重控制[1......
  • 重学c#系列—— 反射的基本理解[三十三]
    前言在上一章中介绍了什么是反射:https://www.cnblogs.com/aoximin/p/16440966.html正文上一节讲述反射的基本原理和为什么要用反射,还用反射的优缺点这些。其二者的......