为什么你不会动态规划?

本文深入探讨动态规划的概念,通过爬楼梯的例子解析最优子结构和无后效性,并提供解决DP问题的一般性思路,包括定义状态、确定初始值、状态转移方程和求解关系,帮助读者掌握动态规划的解题方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态规划(dynamic programming)是刷题中最常见也最重要的一个类别,在研发岗位面试中往往占据着重要地位。对于刷题,要写在前面的是肯定要通过大量的练习和自身体会去把握每种题型的思路,这是大前提。不过动态规划(以下用DP代替)属于没有公式的题型,这种题的特点是可能你花了很长时间去练习,却只能会做之前做过的题;DP的意义就像高考中最后一道大题,成为拉开差距的关键。

那我们不妨用高考数学的思路去理解DP,解题逻辑抽象出来公式化,再加上一定的解题经验,至少做到拿到题后迅速找到思路。按图索骥总比毫无意义的体会分类求解强。这篇文章先介绍DP概念化的东西帮助你理解DP概念和内核,然后通过介绍的概念提出一般公式再通过公式帮助你在实战中攻略DP题目。

 

一,理解动态规划

什么是动态规划?

动态规划指把多阶段过程转化为一系列单阶段问题,然后利用各阶段之间的关系,逐个求解。

这里的各阶段的关系我们可以使用状态转移方程表示,相当于你要得到最后的一个结果只需要利用各个阶段的关系逐步推倒就可以实现。听上去是不是很有道理又很熟悉,比较像高中学习的数学归纳法?

在数学归纳法中,最简单和常见的数学归纳法是证明当n等于任意一个自然数时某命题成立。证明分下面两步:

证明当n = 1时命题成立。
证明如果在n = k时命题成立,那么可以推导出在n = k+1时命题也成立。(k代表任意自然数)

其实也是一种利用各阶段之间的关系逐个求解证明最终命题的过程。关键在于怎么提取这个子关系并让他服务于最后的结果。

提出总体思路之前我们再来体会下DP思想的两个特性来辅助我们理解和设计。

 

最优子结构

最优子结构指的是后面阶段的状态可以通过前面状态推导出来,而每一个阶段的最优决策序列的子序列也是最优的。这样才能保证我们可以利用各阶段的关系去求最

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值