【记忆化搜索】

在这里插入图片描述

欢迎来到Cefler的博客😁
🕌博客主页:那个传说中的man的主页
🏠个人专栏:题目解析
🌎推荐文章:【LeetCode】winter vacation training

在这里插入图片描述


前言
记忆化搜索是一种优化搜索算法的方法,它可以有效地减少重复计算和提高算法效率。该算法通过使用一个缓存数据结构来存储之前计算过的结果,避免了重复计算相同的问题,从而提高了搜索效率。

具体来说,记忆化搜索通常使用递归算法实现。在每次递归调用时,检查缓存中是否已经存储了当前问题的解。如果是,则直接返回缓存中的结果;否则,计算当前问题的解,并将其存储到缓存中,然后返回结果
在这里插入图片描述


目录

  • 👉🏻斐波那契数
    • 记忆化搜索与常规动态规划
  • 👉🏻不同路径
  • 👉🏻最长递增子序列
    • 递归暴搜(超出时间限制)
    • 记忆化搜索优化递归时间

👉🏻斐波那契数

原题链接:斐波那契数

mycode:

class Solution {
public:
    int memory[101];//备忘录
    int dfs(int n)
    {
        if(memory[n]!=-1)
        {
            return memory[n];
        }
        if(n<2)
        {
            memory[n] = n;
            return n;
        }
        else
        {

             memory[n] = fib(n-1)+fib(n-2);
            return memory[n];
        }
    }
    
    int fib(int n) {
        memset(memory,-1,sizeof(memory));
        return dfs(n);
    }

};

记忆化搜索与常规动态规划

在这里插入图片描述
在这里插入图片描述

👉🏻不同路径

原题链接:不同路径

mycode:

class Solution {
public:
    int memo[101][101];//备忘录
    int dfs(int m,int n)
    {
        if(memo[m][n]!=0)
        {
            return memo[m][n];
        }
        if(m==0||n==0) return 0;
        if(m==1&&n==1)
        {
            memo[m][n] = 1;
            return memo[m][n];
        }
        else
        {
            memo[m][n] = dfs(m-1,n)+dfs(m,n-1);
            return memo[m][n];
        }
    }
    int uniquePaths(int m, int n) {
        memset(memo,0,sizeof(memo));
        return dfs(m,n);
    }
};

👉🏻最长递增子序列

原题链接:最长递增子序列

递归暴搜(超出时间限制)

mycode:

class Solution {
public:
   
    int dfs(vector<int>& nums,int pos)
    {
         int ret = 1;
        for(int i = pos+1;i<nums.size();i++)
        {
            if(nums[i]>nums[pos])
            {
                ret = max(dfs(nums,i)+1,ret);
            }
        }
        return ret;
    }
    int lengthOfLIS(vector<int>& nums) {
        int ret = 0;
        for(int i = 0;i<nums.size();i++){
            ret = max(ret,dfs(nums,i));
        }

        return ret;
    }
};

记忆化搜索优化递归时间

class Solution {
public:
   
    int dfs(vector<int>& nums,int pos,vector<int>& memo)
    {
        if(memo[pos]!=0) return memo[pos];
         int ret = 1;
        for(int i = pos+1;i<nums.size();i++)
        {
            if(nums[i]>nums[pos])
            {
                ret = max(dfs(nums,i,memo)+1,ret);
            }
        }
        memo[pos] = ret;
        return ret;
    }
    int lengthOfLIS(vector<int>& nums) {
        int ret = 0;
        vector<int> memo(nums.size());//备忘录
        for(int i = 0;i<nums.size();i++){
            ret = max(ret,dfs(nums,i,memo));
        }

        return ret;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/323116.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络基础学习(3):交换机

1.交换机结构 &#xff08;1&#xff09;网线接口和后面的电路部分加在一起称为一个端口&#xff0c;也就是说交换机的一个端口就相当于计算机上的一块网卡。 如果在计算机上安装多个网卡&#xff0c;并让网卡接收所有网络包&#xff0c;再安装具备交换机功能的软件&#xff0…

NLP论文阅读记录 - 2022 | WOS 数据驱动的英文文本摘要抽取模型的构建与应用

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结 前言 Construction and Application of a Data-Driven Abstract Extractio…

社会科学杂志社会科学杂志社社会科学编辑部2023年第12期部分目录

铁路部门档案管理中存在的问题及对策 尚芝维 公共图书馆共享服务模式分析 高翔 关于加强国有企业固定资产管理的对策 任美琪 大数据时代高校档案管理人才队伍建设策略 胡永芳 数据治理背景下档案数据馆员能力建设研究 许颖 新时代事业单位档案管理人才培养…

做品牌,怎么挖掘用户深层需求?

品牌想要长久发展&#xff0c;就需要去挖掘用户深层需求&#xff0c;什么是用户深层需求&#xff0c;比如做美业的认为用户想要变美是深层次的需求&#xff0c;但其实由美貌带来的附加利益比如说更上镜、竞争优势更大等才属于深层需求&#xff0c;今天媒介盒子就来和大家聊聊&a…

基于树莓派5(Raspberry Pi 5)的高性能工业平板电脑升级版!

​ 上海晶珩继推出首个搭载 Raspberry Pi 5 的平板电脑ED-HMI3010系列后&#xff0c;又推出了具备高性能和多功能特性的 Raspberry Pi 5 的平板电脑ED-HMI3020系列。ED-HMI3020支持选择7英寸和10.1英寸两种尺寸的触摸屏&#xff0c;可选配 M.2 NVMe SSD 存储扩展&#xff0c;提…

ros rqt_bag 用法汇总和用例

文章目录 基本用法高级功能典型用例 rqt_bag 是一个用于ROS&#xff08;机器人操作系统&#xff09;中查看和编辑bag文件的工具。Bag文件是ROS用于记录和回放消息数据的一种格式。以下是 rqt_bag 的主要用法汇总和一些典型用例&#xff1a; 基本用法 启动 rqt_bag 在终端中输入…

FineBI实战项目一(19):每小时订单笔数分析开发

点击新建组件&#xff0c;创建下每小时订单笔数组件。 选择饼图&#xff0c;拖拽cnt&#xff08;总数&#xff09;到角度&#xff0c;拖拽hourstr到颜色&#xff0c;调节内径。 修改现在的文字 拖拽组件到仪表盘。 效果如下&#xff1a;

如何在 PHP 中动态调用类中的方法?

在PHP中&#xff0c;我们可以通过动态调用类方法的方式来实现更加灵活的编程。这种方法可以使我们在运行时根据具体的需要来动态调用类中的方法。 1.使用call_user_func函数 PHP中提供了call_user_func函数用于动态调用类方法。 call_user_func(array($object, $methodName), $…

网络机顶盒什么牌子好?横评30款整理网络机顶盒排行榜

网络机顶盒什么牌子好是大家热议话题&#xff0c;每次发布完测评后会有网友评论不知道如何挑选网络机顶盒&#xff0c;希望我能分享网络机顶盒排行榜&#xff0c;为此我自费购入三十款网络机顶盒&#xff0c;通过多角度对比后整理了这份网络机顶盒排行榜&#xff0c;想知道网络…

element + table 每两行对比相同值列合并

在开始之前先要明确几个概念&#xff1a; 保持不变&#xff1a;{ rowspan: 1, colspan: 1 } 删除一个单元格&#xff1a;{ rowspan: 0, colspan: 0 } 合并一个单元格&#xff1a;{ rowspan: 2, colspan: 1 } <template><div><el-table:data"tableData&quo…

1.15寒假集训

A: 解题思路&#xff1a; 题目意思就是找大于等于n的最小3的倍数&#xff0c;当&#xff4e;为&#xff13;的倍数时&#xff0c;最小就为&#xff4e;&#xff0c;否则输出&#xff13; * (n / 3 1)。 下面是c代码&#xff1a; #include<iostream> using namespace…

Java中单体应用锁的局限性分布式锁

互联网系统架构的演进 在互联网系统发展之初&#xff0c;系统比较简单&#xff0c;消耗资源小&#xff0c;用户访问量也比较少&#xff0c;我们只部署一个Tomcat应用就可以满足需求。系统架构图如下: 一个Tomcat可以看作是一个JVM进程&#xff0c;当大量的请求并发到达系统时&…

聚合收益协议 InsFi :打开铭文赛道全新叙事的旋转门

​“InsFi 协议构建了一套以铭文资产为基础的聚合收益体系&#xff0c;该体系正在为铭文资产捕获流动性、释放价值提供基础&#xff0c;该生态也正在成为铭文赛道掘金的新热土。” 在 2023 年年初&#xff0c;Ordinals 协议在比特币链上被推出后&#xff0c;为比特币链上带来了…

点击切换图片,样式

切换场景&#xff1a; 本文章向大家介绍uniapp之 点击图片切换&#xff0c;使用实例、应用技巧、基本知识点总结和需要注意事项&#xff0c;具有一定的参考价值&#xff0c;需要的朋友可以参考一下。 提示&#xff1a;点击时进行角色切换&#xff0c;【图片切换&#xff0c;并…

idea安装go

1.根据系统平台&#xff0c;下载安装Go&#xff1a; 知乎 - 安全中心 2.windows系统&#xff0c;下载安装MinGW(gcc)&#xff1a; 知乎 - 安全中心 3.安装后cmd输入一下 go env 4.代理设置 go env -w GOPROXYhttps://goproxy.cn,direct 5.idea插件安装 file->setti…

Pandas.DataFrame.loc[ ] 筛选数据-标签法 详解 含代码 含测试数据集 随Pandas版本持续更新

关于Pandas版本&#xff1a; 本文基于 pandas2.1.2 编写。 关于本文内容更新&#xff1a; 随着pandas的stable版本更迭&#xff0c;本文持续更新&#xff0c;不断完善补充。 Pandas稳定版更新及变动内容整合专题&#xff1a; Pandas稳定版更新及变动迭持续更新。 Pandas API参…

Win和Mac系统重置系统方法

注意&#xff1a;重置系统前&#xff0c;请备份好系统盘资料到其他盘符&#xff01;重置系统将会删除应用和系统设置&#xff0c;甚至用户文件&#xff0c;还原为出厂设置模式。 Windows重置系统操作方法。&#xff08;目前支持WIN8&#xff0c;WIN10&#xff0c;WIN11&#x…

Hotspot源码解析-第十九章-ClassLoaderData、符号表、字符串表的初始化

第十九章-ClassLoaderData初始化 讲解本章先从一张图开始 众所周知&#xff0c;Java类的相关信息都是存储在元空间中的&#xff0c;但是是怎么存储的&#xff0c;相信很多读者是不清楚的&#xff0c;这里就不得不涉及到ClassLoaderDataGraph、classLoader、classLoaderData&…

.Net6使用SignalR实现前后端实时通信

代码部分 后端代码 &#xff08;Asp.net core web api&#xff0c;用的.net6&#xff09;Program.cs 代码运行逻辑&#xff1a; ​1. 通过 WebApplication.CreateBuilder(args) 创建一个 ASP.NET Core 应用程序建造器。 2. 使用 builder.Services.AddControllers() 添加 MVC 控…

JavaScript之函数、数组作业

1.计算用户指定的数值内的奇数和&#xff0c;例如用户输入的是10&#xff0c;则计算1 3 5 7 9的和&#xff1b; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content&qu…