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


目录
相关文章
|
8月前
|
存储 算法 Python
算法专题1——动态规划 Dynamic Programming,DP
算法专题1——动态规划 Dynamic Programming,DP
72 0
|
22天前
|
SQL 算法 数据挖掘
动态规划Dynamic programming详解-编辑距离问题【python】
动态规划Dynamic programming详解-编辑距离问题【python】
|
26天前
|
存储 算法 Java
动态规划详解(Dynamic Programming)
动态规划详解(Dynamic Programming)
13 1
|
22天前
|
存储 SQL 算法
动态规划Dynamic programming详解-背包问题【python】
动态规划Dynamic programming详解-背包问题【python】
|
22天前
|
存储 算法 数据挖掘
动态规划Dynamic programming详解-最长公共子序列【python】
动态规划Dynamic programming详解-最长公共子序列【python】
|
2月前
|
机器人
动态规划Dynamic Programming
动态规划Dynamic Programming
22 0
|
2月前
|
机器学习/深度学习 存储 算法
算法·动态规划Dynamic Programming
算法·动态规划Dynamic Programming
15 0
|
9月前
|
存储 算法 Python
Dynamic Programming,简称 DP
动态规划(Dynamic Programming,简称 DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划的核心思想是,将问题分解成若干个子问题,通过求解子问题并将子问题的解存储起来,以便在需要时可以重复使用,从而避免了重复计算,提高了算法的效率
73 3
|
11月前
UVa11157 - Dynamic Frog(动态规划)
UVa11157 - Dynamic Frog(动态规划)
39 0
|
机器学习/深度学习 开发框架 编解码
动手学强化学习(三):动态规划算法 (Dynamic Programming)
动态规划(dynamic programming)是程序设计算法中非常重要的内容,能够高效解决一些经典问题,例如背包问题和最短路径规划。动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到目标问题的解。动态规划会保存已解决的子问题的答案,在求解目标问题的过程中,需要这些子问题答案时就可以直接利用,避免重复计算。本章介绍如何用动态规划的思想来求解在马尔可夫决策过程中的最优策略。
198 0
动手学强化学习(三):动态规划算法 (Dynamic Programming)