【记忆化搜索】

news2024/10/5 20:28:17

在这里插入图片描述

欢迎来到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;
    }

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache StringUtils:Java字符串处理工具类

简介 在我们的代码中经常需要对字符串判空&#xff0c;截取字符串、转换大小写、分隔字符串、比较字符串、去掉多余空格、拼接字符串、使用正则表达式等等。如果只用 String 类提供的那些方法&#xff0c;我们需要手写大量的额外代码&#xff0c;不然容易出现各种异常。现在有…

GL Logger和CANFDLog-OTL-128两款记录仪都是如何实现高效的报文录制的?

GL Logger是Vector推出的记录CAN/CAN FD、LIN、FlexRay和MOST数据通信的工具。以GL2400为例带着大家一步步地实现路试过程中通过整车OBD口进行CAN/CANFD报文的录制。 Step1 设备配置 设备配置即设备录制方式、录制内容、设备休眠唤醒策略等。 ▷ 打开Vector Logger Configurat…

调试ad5245的总结

调试ad5245的总结 这个ad5245是通过IIC与FPGA进行通信的&#xff0c;首先要理解IIC协议。 经验总结&#xff1a; 1、SCL和SDA端的要有上拉电阻&#xff0c;且上拉电阻能正常工作&#xff1b; 2、要往SDA数据线上写三个字节才能调节ad5245的电阻值&#xff0c;第三个字节就是…

html中的flex是什么?——弹性布局

在HTML中&#xff0c;flex是一种布局方式&#xff0c;用于处理容器中的子元素的布局。它是CSS3的一部分&#xff0c;也被称为弹性布局。 通过使用flex布局&#xff0c;可以将容器中的子元素进行灵活的定位和扩展&#xff0c;以适应不同的屏幕尺寸和设备。它提供了一种简单而强…

flink 1.18 sql gateway /sql gateway jdbc

一 sql gateway 注意 之所以直接启动gateway 能知道yarn session 主要还是隐藏的配置文件&#xff0c;但是配置文件可以被覆盖&#xff0c;多个session 保留最新的applicationid 1 安装flink &#xff08;略&#xff09; 2 启动sql-gatway(sql-gateway 通过官网介绍只能运行…

【时光记:2023的心灵旅程】

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

tree数据处理

接口获取数据oldArr [{"deptCode": "01","parentCode": "000","sortKey": 4,"deptName": "办公室&#xff08;党委办公室、董事会办公室&#xff09;","children": [{"deptCode":…

九、Qt C++ 毕业设计 数据库相关

《一、QT的前世今生》 《二、QT下载、安装及问题解决(windows系统)》《三、Qt Creator使用》 ​​​ 《四、Qt 的第一个demo-CSDN博客》 《五、带登录窗体的demo》 《六、新建窗体时&#xff0c;几种窗体的区别》 《七、Qt 信号和槽》 《八、Qt C 毕业设计-CSDN博客》 …

从JVM角度对java中引用的理解

学java这么久了&#xff0c;对java引用越来越深刻&#xff0c;好好梳理一下下面三个问题&#xff0c;带着问题进行理解。 什么是引用&#xff1f;引用存放在jvm哪个区域&#xff1f; 引用是一种变量类型。引用类型占四个字节。 变量类型分为基本类型和引用类型。 我们知道jav…

2023年跨国企业如何实现跨境数据传输合规化(上)

一、什么是数据跨境传输&#xff1f; 首先了解一个概念&#xff0c;什么是数据跨境传输&#xff1f; 数据跨境传输简单概括就是指信息通过互联网等网络媒介&#xff0c;在跨国企业之间进行传递和交换的过程。 有一则官方网站关于全球化数字化的数据统计&#xff1a;仅2019 年…

【Web】什么是 XSS 攻击,如何避免?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a;Web ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 前言 正文 常见方法&#xff1a; 结语 我的其他博客 前言 在当今数字化时代&#xff0c;网络安全成为信息技术领域中的一项至关重要的任务。X…

视频和音频怎么合并在一起?分享3个轻松合并的实用技巧

视频和音频怎么合并在一起&#xff1f;在数字媒体时代&#xff0c;视频和音频是制作多媒体内容不可或缺的元素。有时我们需要将视频和音频合并在一起&#xff0c;以创建更丰富、更有趣的多媒体内容。那么&#xff0c;如何将视频和音频合并在一起呢&#xff1f;下面将介绍一些实…

NLP论文阅读记录 - 2022 | WOS 用于摘要法律文本的有效深度学习方法

文章目录 前言0、论文摘要一、Introduction1.1目标问题 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结 前言 Effective deep learning approaches for summarization of legal texts&#xff08;22&#x…

第一个Python程序_获取网页 HTML 信息[Python爬虫学习笔记]

使用 Python 内置的 urllib 库获取网页的 html 信息。注意&#xff0c;urllib 库属于 Python 的标准库模块&#xff0c;无须单独安装&#xff0c;它是 Python 爬虫的常用模块。 获取网页 HTML 信息 1) 获取响应对象 向百度&#xff08;http://www.baidu.com/&#xff09;发起…

计算3种颜色粉刷立方体的所有可能方法

“&#xff08;伯恩赛德引理&#xff09;设G是一个作用在有限集合X上的有限群&#xff0c;令N为轨道的个数&#xff0c;则 其中Fix(x)是被τ固定的x∈X的个数.“ *高等近世代数 Joseph J. Rotman P78 “设G是一个有限群&#xff0c;作用在集合X上。对每个g属于G令X^g表示X中在g…

电力能源监测管理系统,在医院中有哪些作用?

随着经济全球化的发展&#xff0c;节能减排成为当前社会发展必须关注的问题。电力能源监测管理系统&#xff0c;可以分析电力管理能源的现状&#xff0c;并根据现状提出对应的策略&#xff0c;为快速高效建成绿色智能化医院提供有力支撑和技术保障。 医院能源管理现状 1、人力…

linux 网络文件共享服务

存储类型 DAS 直连式存储 SAN 存储区域网络 NAS 网络附近存储 FTP文件传输协议 文件传输协议 FTP 早期的三个应用级协议之一&#xff0c;基于c/s架构 数据传输格式&#xff1a;二进制&#xff08;默认&#xff09;和文本 tcp 21端口&#xff08;权限&#xff0c;…

uniapp 如何使用echarts 以及解决tooltip自定义不生效问题

使用的是echarts-for-wx插件&#xff1b; 正常写法案例&#xff1a;给tooltip数值加个% <template><view><uni-ec-canvas class"uni-ec-canvas"id"uni-ec-canvas"ref"canvas"canvas-id"uni-ec-canvas":ec"ec&quo…

Android-网络基础

http 与 https 的区别&#xff1f;https 是如何工作的&#xff1f; http 是超文本传输协议&#xff0c;而 https 可以简单理解为安全的 http 协议。https 通过在 http 协议下添加了一层 ssl 协议对数据进行加密从而保证了安全。https 的作用主要有两点&#xff1a;建立安全的信…

使用WAF防御网络上的隐蔽威胁之CSRF攻击

在网络安全领域&#xff0c;除了常见的XSS&#xff08;跨站脚本&#xff09;攻击外&#xff0c;CSRF&#xff08;跨站请求伪造&#xff09;攻击也是一种常见且危险的威胁。这种攻击利用用户已经验证的身份在没有用户知情的情况下&#xff0c;执行非授权的操作。了解CSRF攻击的机…