动态规划dp

动态规划的课堂学习笔记
(仅仅作于我的个人学习笔记嘻嘻)
来,开启神奇之旅

题目:爬楼梯
化繁为简



问题建模

  • 拆解
    F(10)=F(9)+F(8)
    F(9)=F(8)+F(7)
    F(8)=F(7)+F(6)

    F(3)=F(2)+F(1)
    F(2)=2
    F(1)=1

  • 归纳
    F(1) = 1;
    F(2) = 2;
    F(n) = F(n-1)+F(n-2)(n>=3)

  • 最优子结构
    F(10)=F(9)+F(8)
    因此,F(9)和F(8)为F(10)的最优子结构。

  • 问题的边界
    F(1),F(2)可直接得结果,无需简化。
    如果一个问题没有边界,将永远无法得到有限的结果。

  • 状态转移方程
    F(n) = F(n-1)+F(n-2)(n>=3)

求解问题

  • 递归求解
    时间复杂度:O(2*n)递归
    树

  • 备忘录算法
    时间、空间复杂度都为O(n),哈斯表暂存计算结果,用时直接运用。备忘录算法

  • 动态规划求解
    时间复杂度O(n),空间复杂度O(1),只运用了两/三个变量。
    (以上两种方法皆为自顶向下,递归
    接下来(自底向上,迭代),类如:F(3)依赖于F(1),F(2)相加。
    描述
    1
    2
    3
    4
    代码实现
    代码
    程序从 i=3 开始迭代,一直到 i=n 结束。每一次迭代,都会计算出多一级台阶的走法数量。迭代过程中只需保留两个临时变量a和b,分别代表了上一次和上上次迭代的结果。 为了便于理解,我引入了temp变量。temp代表了当前迭代的结果值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值