动态规划(Dynamic Programming)详解

news/2024/12/22 9:37:01/

动态规划(Dynamic Programming,简称DP)就像是个聪明的厨师,他懂得怎样把一道复杂的菜肴分成一小块一小块来做,而且他知道怎么利用之前做好的部分,避免重复劳动,最后拼凑成美味佳肴。

比如,我们想解决一个问题,这个问题太大太复杂,一时半会儿找不到答案。这时候,动态规划登场了,它告诉我们,先把这个大问题拆分成一个个小问题,这些小问题之间是有联系的,解决一个小问题的结果可以用在解决其它小问题上,甚至用在解决大问题本身。

具体怎么做呢?分四步:

    1.    明确小问题:首先,我们要清楚地知道哪些是“小问题”,就像是把一个大任务分解成一个个具体的步骤,比如“先切菜,再炒菜”。
    2.    找到规律:然后,我们发现小问题之间是有规律的,解决一个新小问题时,往往能借助于之前解决过的类似小问题的结果,就像炒第二个菜时,你知道第一个菜怎么炒,就不用重新学炒菜的基本功了。
    3.    从小做起:接着,我们从最容易解决的小问题开始,逐步解决更复杂的问题,每解决一个,就把它记下来,以后用的时候直接查就行,就像先把容易切的菜切完,放到盘子里备用。
    4.    合并成果:最后,我们利用已经解决的所有小问题的结果,拼凑出大问题的最终答案。就像所有的食材都准备好了,就可以炒出整道大菜了。

举个日常的例子,计算斐波那契数列(F(n)等于前面两个数之和,初始值F(0)=0,F(1)=1),如果不用动态规划,每次算新数都要从头算起。但用动态规划,我们可以先算出F(0)和F(1),然后用已算出的F(n-1)和F(n-2)来算F(n),这样层层推进,避免了大量的重复计算,很快就得到了想要的答案。


http://www.ppmy.cn/news/1404962.html

相关文章

Debian 配置国内软件源

为什么需要? Debian安装好之后默认是没有软件源的,只能通过本身的光盘上的软件进行安装,这样明显是不能够满足我们的需要的,考虑到国内的上网速度以及环境,配置一个国内的阿里镜像源是最好的选择。 使用 sudo vim /…

更高效、更简洁的 SQL 语句编写丨DolphinDB 基于宏变量的元编程模式详解

元编程(Metaprogramming)指在程序运行时操作或者创建程序的一种编程技术,简而言之就是使用代码编写代码。通过元编程将原本静态的代码通过动态的脚本生成,使程序员可以创建更加灵活的代码以提升编程效率。 在 DolphinDB 中&#…

Python中主要数据结构的使用

文章目录 数组队列 queue双端队列 deque栈 stack优先队列 priority_queue集合 set映射/字典 map 数组 使用内置类型list实现,主要有如下操作: array [] array.append(1) length len(array) if not array:# 列表为空print("array is empty"…

QT使用数据库和proC数据库

一,QT使用数据库 数据库就是保存数据的文件。可以存储大量数据,包括插入数据、更新数据、截取数据等。用专业术语来说,数据库是“按照数据结构来组织、存储和管理数据的仓库”。 什么时候需要数据库?在嵌入式里&#xff0…

Zookeeper脑裂解决方案

Zookeeper脑裂原因: 主要原因是Zookeeper集群和Zookeeper client判断超时并不能做到完全同步,也就是说可能一前一后,如果是集群先于client发现,那就会出现上面的情况。同时,在发现并切换后通知各个客户端也有先后快慢…

【C++】哈希之位图

目录 一、位图概念二、海量数据面试题 一、位图概念 假如有40亿个无重复且没有排序的无符号整数,给一个无符号整数,如何判断这个整数是否在这40亿个数中? 我们用以前的思路有这些: 把这40亿个数遍历一遍,直到找到为…

隐私计算实训营第七讲-隐语SCQL的架构详细拆解

隐私计算实训营第七讲-隐语SCQL的架构详细拆解 文章目录 隐私计算实训营第七讲-隐语SCQL的架构详细拆解1.SCQL Overview1.1 多方数据分析场景1.2 多方数据分析技术路线1.2.1 TEE SQL方案1.2.2 MPC SQL方案 1.3 Secure Collaborative Query Language(SCQL)1.3.1 SCQL 系统组件1.…

C#字典学习笔记

using System; using System.Collections.Generic;class Program {private static Dictionary<string, string> myDictionary new Dictionary<string, string>();//字典索引必须是唯一的&#xff0c;值可以不是static void Main(){// 向静态成员 myDictionary 添加…