记忆化搜索

记忆化搜索

前言

动态规划呢其实是理查德·贝尔曼在研究多阶段决策过程的优化问题时,提出了著名的最优化原理。所以说动态规划的本质其实是记忆化搜索。

正文

所以说我们这里以斐波那契问题为例

众所周知斐波那契用函数表示是:
f ( n ) = f ( n − 1 ) + f ( n − 2 ) f(n) = f(n - 1) + f(n - 2) f(n)=f(n1)+f(n2)
n = 5 n=5 n=5 时,我们会发现一个 f f f 函数会被调用多次

比如在这个图里我们很容易发现 f ( 3 ) f(3) f(3) 不仅被 f ( 5 ) f(5) f(5) 调用,还被 f ( 4 ) f(4) f(4) 调用。那么被调用多次的 f ( 3 ) f(3) f(3) 该怎么办呢?其实很简单,我们只需要再用一个数组 g ( i ) g(i) g(i) 表示 f ( i ) f(i) f(i) 的值,这样我们可以花费 O ( 1 ) O(1) O(1) 的时间来查找 f ( i ) f(i) f(i) 了。

那么我们直接快乐的贴上代码吧

int fib(int n) {
    if (memo[n] == -1) {
        if (n <= 1) memo[n] = 1;
        else memo[n] = fib2(n - 1) + fib2(n - 2);
    }
    return memo[n];
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值