动态规划

动态规划是一种解决复杂问题的方法,通过分解问题为子问题并利用子问题的解来构建原问题的解。它涉及最优子结构、无后效性和重叠子问题的特性。动态规划适用于具有这些特性的最优化问题,如斐波那契数列等。与分治和贪心算法不同,动态规划处理子问题的重叠,避免重复计算,通过状态转移方程和边界条件来构建最优解。

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

算法思想

dynamic programming is a method for solving a complex problem by breaking it down into a collection of simpler subproblems.——维基百科

动态规划的思想:将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。

动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存下来,即空间换时间

算法本质

动态规划的本质(核心),是对问题状态的定义状态转移方程的定义,也可以用非数学的话来描述:原问题的解如何由子问题的解组合而成

 考察一个实际问题: 
​ 斐波那契数列:1、1、2、3、5、8、13、21、34、……
数学定义:F(0)=1,F(1)=1,F(2)=2,……, F(n)=F(n-1)+F(n-2)

上述的F(n)就是一个子问题,也就可以叫做状态,定义”F(n)为斐波那契数列的第n个数“,就叫做状态的定义

而对于数学方程F(n)=F(n-1)+F(n-2),可以理解为从状态F(n-1)和F(n-2)转移到状态F(n),而这样的方程的定义就叫做状态转移方程的定义

在对状态和状态转移方程的定义过程中,满足“最优子结构”是一个隐含的条件(否则根本定义不出来)。

适用的情

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值