备忘录方法

一文彻底搞懂递归、备忘录、动态规划 递归: 递归算法是一类非常常用的算法,它是一种直接或间接调用原算法本身的算法。递归算法最大的特点就是“自己调用自己”,对于一些具有递归特性的问题,使用递归算法来解决会更加简单明了,且易于实现。 在使用递归算法解决实际的问题时,要自顶向下地将一个大问题拆分成同类的小问题,然后利用同类问题这一特性构造出解决问题的递归函数,也就是这种“自己调用自己”的模型,再通过程序实现这个递归函数。 下面通过一个实例理解递归算法。 走楼梯问题:... 阅读详情
动态规划算法的一个变形是备忘录方法。备忘录方法也用一个表格来保存已解决的子问题的答案,在下次需要解决此问题时,只要简单地查看该子问题的解答,而不必重新计算。与动态规划算法不同的是,备忘录方法的递归方式是自顶向下的,而动态规划算法则是自底向上递归的。因此,备忘录方法的控制结构与直接递归方法的控制结构相同,区别在于备忘录方法为每个解过的子问题建立了备忘录以备需要时查看,避免了相同子问题的重复求解。


以求斐波那契数列为例,斐波那契数列,每个数都等于前两个数字之和:
1, 1, 2, 3, 5, 8, 13, 21, 34, ......
在用递归函数求斐波那契数列时,公式为:F(n)=F(n-1)+F(n-2),
以F(10)为例,F(10)=F(9)+F(8),由于F(9)等于F(8)+F(7),所以,当F(9)计算出来时,F(8)其实已经计算完了,
下面的程序用flag数组记录哪些项已经计算过了,用 ans数组存储这些项的具体值。

下面程序的运行环境为DEV-C++。

//未优化的求斐波那契数列的程序
#include <stdio.h>
long long fun(int n)
{
int v1,v2;
if(n==1 || n==2)
return 1;
v1=fun(n-1);
v2=fun(n-2);
return v1+v2;
}

int main()
{
long long k;
k=fun(42);
printf("%lld \n",k);
return 0;
}
//备忘录方法优化后的求斐波那契数列的程序
#include <stdio.h>
long long ans[1000];
char flag[1000];
long long fun(int n)
{
int v1,v2;
if(n==1 || n==2)
return 1;
if(flag[n-1]==0)//如果之前未计算过fun(n-1)
{
v1=fun(n-1);
ans[n-1]=v1;
flag[n-1]=1;
}
else
v1=ans[n-1]; //如果之前计算过fun(n-1),直接从ans[n-1]取数
if(flag[n-2]==0)//如果之前未计算过fun(n-2)
{
v2=fun(n-2);
ans[n-2]=v2;
flag[n-2]=1;
}
else
v2=ans[n-2]; //如果之前计算过fun(n-2),直接从ans[n-2]取数
return v1+v2;
}

int main()
{
long long k;
k=fun(42);
printf("%lld \n",k);
return 0;
}



备忘录算法 备忘录 算法 int Distance(int i, int j){ if (mem[i][j] == -1){ if (i == 0 && j == 0){ mem[i][j] = 0; } else if (i == 0 || j == 0){ mem[i][j] = max(i, j); 立即下载

相关推荐

一种导弹追踪算法的MATLAB仿真实现

以下是一个用于模拟机动变轨导弹和防空导弹追踪过程的 MATLAB 代码,同时会提供 3D 效果展示。你可以运行这段代码,从而观察机动变轨导弹和防空导弹的速度与位置变化。

SmartGridequation的博客 933

数据结构: 备忘录方法

备忘录方法 动态规划算法的一个变形就是 备忘录方法 备忘录方法也用一个表格来保存已解决的子问题的答案. 在下次需要解决此问题时,只要简单地查看该子问题的解答,而不必重新计算. 但与动态规划不同: 备忘录方法的递归方式是自顶向下的,而动态规划算法则是自底向上递归的。 备忘录方法的控制结构与直接递归方法的控制结构相同 区别在于备忘录方法为每个解过的子问题建立了备忘录以备需要时查看,避免了相...

【黑键】 1259

Depth Anything 3实战:如何用DINOv2 Transformer一键生成3D高斯点云?

本文详细介绍了Depth Anything 3(DA3)模型如何利用DINOv2 Transformer架构,实现从单张或多视角图像一键生成高质量3D高斯点云。DA3通过统一的深度-射线表示和自适应注意力机制,简化了传统复杂的3D重建流程,并可直接微调用于3D高斯渲染,为图形学、CV和内容创作领域提供了高效的端到端解决方案。

postgres8guard的博客 722

【算法】备忘录法(记忆化搜索)

文章目录什么是备忘录法备忘录法的实现 什么是备忘录法 备忘录法是为了解决避免分治算法中相同子问题的重复求解。 备忘录法为每个解过的子问题建立备忘录以备需要时查看,所以也称搜表法。 备忘录法的控制与直接使用递归方法的控制结构相同。 备忘录法又称记忆化搜索,自顶向下的方式解决问题。 备忘录法的实现 避免子问题重复被求解,我们可以定义一个数组,每次要计算一个子问题时,首先从数组中查询这个子问题的解,子问题解没有在数组中,说明没有计算过该子问题,我们可以计算该子问题,并将解放到数组中去,以便下次计算该子问

高朗的博客 7772

基于Java+SpringBoot+Vue的中小企业设备管理系统的设计与开发(源码+lw+部署文档+讲解等)

💗博主介绍:✌新人博主,工作经验两年+、专注于Java、小程序技术领域和毕业项目实战✌💗🌟文末获取源码+数据库🌟

2301_76502068的博客 1382

ROS从入门到精通0-4:VSCode 搭建 ROS 工程环境

为了提高开发效率,可以先安装集成开发工具和使用方便的工具,本教程用VSCode搭建ROS工程环境

FRIGIDWINTER的博客 1万+

备忘录方法与动态规划比较

 动态规划算法的基本要素: 1  最优子结构性质当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质。2  重叠子问题性质   动态规划算法对每个问题只解一次,将其解保存在一个表格中,当再次需要解此问题时,用常数时间查看一下结果。因此,用动态规划算法通常只需要多项式时间。备忘录方法:•用一个表格来保存已解决的子问题的答案,用的时候查表即可。 •采用的递归方式是自顶向下。•控制结构

operatingtuzi的专栏 1万+

C#实战:从零搭建Vosk离线语音转文字系统

本文手把手教你用C#构建离线语音转文字系统,基于NAudio和Vosk实现全流程开发。首先介绍环境搭建,包括NuGet包安装和中文模型配置,强调16kHz单声道音频格式的关键性。接着详细解析音频预处理转换、Vosk模型初始化及识别过程的核心代码,提供多线程优化建议和实时识别扩展思路。文章包含80%以上代码注释,从常见问题排查到性能优化技巧,完整覆盖从"Hello World"到工业级部署的关键技术点,特别适合需要开发本地化语音识别应用的C#开发者。

墨夶的博客 752

苹果备忘录怎么导出?快速导出备忘录的方法

苹果备忘录是iPhone、iPad等设备上的一个强大工具,用于记录各种信息、任务和想法。有时候我们需要将备忘录内容导出到其他设备或应用程序中。这时,苹果备忘录怎么导出?让本文为您介绍三种常见的方法。

shujuwa123的博客 3517

运营商拼命封杀的PCDN到底是个啥?

最近一段时间,很多宽带用户发现自家的网速莫名其妙变慢了,甚至收到了运营商发来的“违规使用宽带”警告短信,严重的甚至直接被断网。很多人一头雾水:我交了钱办的宽带,自己买的插件或者京东云、网心云这些硬件赚点“电费”,怎么就成了运营商眼中的“过街老鼠”?今天,我们就把这层窗户纸捅破,深度剖析这个让互联网大厂省下几十亿、让运营商恨得牙痒痒、让用户夹在中间进退两难的技术黑话——。

网络技术联盟站 916

CAN轴控制流【6041,6040】

【代码】CAN轴控制流【6041,6040】

cfqq1989的博客 1782

苹果备忘录删除了怎么恢复?救回备忘录,马上试试这4个方法

在这篇文章中,介绍了4种解决苹果备忘录删除了怎么恢复的方法。包括利用最近删除功能、iCloud云备份、iTunes备份以及专业数据恢复工具,您可根据实际情况进行恢复。

jumpjane的博客 3145

用miniconda建立PyTorch、Keras、TensorFlow三个环境

如果还没有安装Miniconda,请从[Miniconda官网](https://docs.conda.io/en/latest/miniconda.html)下载合适的版本并进行安装。如果遇到问题,可以通过编辑`~/.condarc`文件来临时禁用某个源,或者通过`conda config --remove channels`命令来移除配置的镜像源。要切换到不同的环境,先使用`conda deactivate`命令退出当前环境,再用`conda activate 环境名称`命令激活另一个环境。

数字人生 2464

动态规划&备忘录方法&递归方法

动态规划的基本思想是,将原问题拆分为若干子问题,自底向上的求解。其总是充分利用重叠子问题,即通过每个子问题只解一次,把解保存在一个表中,巧妙的避免了子问题的重复求解。 递归方法,采用的是自顶向下的思想,拆分为若干子问题,但是造成了子问题的重复求解。 备忘录方法,采用的也是自顶向下的思想,但是该方法维护了一个记录子问题解的表,虽然填表动作的控制结构更像递归方法,但是的确避免了子问题的重复

xyjikl 5332

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

5种最佳方法将iPhone语音备忘录传输到Mac

好的,我们介绍了5种将语音备忘录从iPhone传输到Mac的方法。其中,使用iReaShare iPhone Manager的方法是唯一通过USB线进行端到端直接传输的方法。它的优点是能够让传输过程安全、快速且流畅。此外,它也比其他方法简单得多。因此,现在就下载这个专业程序并试用吧。我们相信你的选择会给你带来意想不到的惊喜。

Digitally的博客 2187

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

苹果备忘录导出方法

本文介绍了几种导出备忘录的方法,供大家参考。包括 iCloud 导出,Pages 文稿导出,Exporter 导出。

Aiden的笔记本 1万+

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

如何将备忘录从 iPhone 传输到Android [4 种方法]

本文提供四种方法将iPhone备忘录传输到Android设备。方法一通过电子邮件发送备忘录,适合小文件。方法二利用国内云服务如华为云或小米云同步备忘录。方法三使用跨平台应用如Evernote或WPS Office共享备忘录。方法四专为三星用户设计,通过Smart Switch应用迁移备忘录。此外,Coolmuster Mobile Transfer可帮助用户轻松迁移包括备忘录在内的多种数据。选择适合的方法,确保重要备忘录安全传输。

Coolmuster的博客 2万+
上一篇: 当数组下标是负数
下一篇: 动态规划之01背包问题(最易理解的讲解)(转载)
xifengcode
博客等级 码龄9年 529粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值