动态规划(Dynamic Programming)详解

简介: 动态规划(Dynamic Programming)详解

动态规划(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),这样层层推进,避免了大量的重复计算,很快就得到了想要的答案。


目录
相关文章
|
9月前
|
算法 安全 编译器
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
【C++20 新特性Concepts 概念】C++20 Concepts: Unleashing the Power of Template Programming
363 0
|
存储 算法 Python
算法专题1——动态规划 Dynamic Programming,DP
算法专题1——动态规划 Dynamic Programming,DP
108 0
|
3月前
|
存储 Python
动态规划(Dynamic Programming, DP)
动态规划(Dynamic Programming, DP)
36 2
|
8月前
|
SQL 算法 数据挖掘
动态规划Dynamic programming详解-编辑距离问题【python】
动态规划Dynamic programming详解-编辑距离问题【python】
|
9月前
|
缓存 算法 C语言
【C++ 标准查找算法 】C++标准库查找算法深入解析(In-depth Analysis of C++ Standard Library Search Algorithms)
【C++ 标准查找算法 】C++标准库查找算法深入解析(In-depth Analysis of C++ Standard Library Search Algorithms)
125 0
|
8月前
|
存储 算法 Java
动态规划详解(Dynamic Programming)
动态规划详解(Dynamic Programming)
96 1
|
8月前
|
存储 SQL 算法
动态规划Dynamic programming详解-背包问题【python】
动态规划Dynamic programming详解-背包问题【python】
|
8月前
|
存储 算法 数据挖掘
动态规划Dynamic programming详解-最长公共子序列【python】
动态规划Dynamic programming详解-最长公共子序列【python】
|
9月前
|
机器人
动态规划Dynamic Programming
动态规划Dynamic Programming
54 0
|
9月前
|
机器学习/深度学习 存储 算法
算法·动态规划Dynamic Programming
算法·动态规划Dynamic Programming
55 0