✨✨✨学习的道路很枯燥,希望我们能并肩走下来!
文章目录
目录
前言
本篇详细介绍了进一步介绍记忆化搜索,让使用者对记忆化搜素有更加深刻的认知,而不是仅仅停留在表面,更好的模拟,为了更好的使用. 文章可能出现错误,如有请在评论区指正,让我们一起交流,共同进步!
一 什么是记忆化搜索
记忆化搜索(Memoization Search):是一种通过存储已经遍历过的状态信息,从而避免对同一状态重复遍历的搜索算法。
记忆化搜索是动态规划的一种实现方式。在记忆化搜索中,当算法需要计算某个子问题的结果时,它首先检查是否已经计算过该问题。如果已经计算过,则直接返回已经存储的结果;否则,计算该问题,并将结果存储下来以备将来使用。
这样看概念可能有些抽象,接下来将用斐波那契数作为例子讲解
二 相关题目练习
2.1 斐波那契数(详解记忆化搜索)
解法一(递归):
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次方),那么为什么呢?
我们发现,递归的解法重复计算,导致效率低下!
那么我们可不可以用一个备忘录记录下重复计算的值呢?