如何让算法拥有“记忆”?一文读懂记忆化搜索

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

文章目录

目录

文章目录

前言

一  什么是记忆化搜索

二  相关题目练习

2.1  斐波那契数(详解记忆化搜索)

​编辑 解法一(递归):

解法二(记忆化搜索):

解法三(动态规划): 

2.2  不同路径 

 2.3  最长递增子序列

 2.4  猜数字大小II

2.5   矩阵中的最长递增路径

总结


前言

本篇详细介绍了进一步介绍记忆化搜索,让使用者对记忆化搜素有更加深刻的认知,而不是仅仅停留在表面,更好的模拟,为了更好的使用. 文章可能出现错误,如有请在评论区指正,让我们一起交流,共同进步!


一  什么是记忆化搜索

记忆化搜索(Memoization Search):是一种通过存储已经遍历过的状态信息,从而避免对同一状态重复遍历的搜索算法

        记忆化搜索是动态规划的一种实现方式。在记忆化搜索中,当算法需要计算某个子问题的结果时,它首先检查是否已经计算过该问题。如果已经计算过,则直接返回已经存储的结果;否则,计算该问题,并将结果存储下来以备将来使用。  

        这样看概念可能有些抽象,接下来将用斐波那契数作为例子讲解 

二  相关题目练习

2.1  斐波那契数(详解记忆化搜索)

509. 斐波那契数 - 力扣(LeetCode)

 解法一(递归):

class Solution {
public:
    int fib(int n) {
        return dfs(n);
    }

    int dfs(int n)
    {
        if(n == 0 || n == 1)    return n;
        return dfs(n-1) + dfs(n-2);
    }
};

 从解法上看,这是一种低效的做法,时间复杂度为(2的n次方),那么为什么呢?

 我们发现,递归的解法重复计算,导致效率低下!

那么我们可不可以用一个备忘录记录下重复计算的值呢?

解法二(记忆化搜索):

评论 42
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值