算法系统学习-兔子生兔子(迭代算法-正推法)

简介: 该系列是基于有一定语言基础(C,C++,Java等等)和基本的数据结构基础进行的算法学习专栏,如果觉得有点吃力 😥 ,建议先了解前提知识再学习喔!本个专栏会将用更容易理解的表达去学习算法,如果在一些表述上存在问题还请各位多多指点

迭代(Iteration)算法


概述:

也称是一种不断用变量的旧值递推出新值的解决问题的方法。一般用于数值计算,常见的累加,累乘都是迭代算法策略的基础应用。


主要步骤:

  1. 确定迭代模型
  2. 建立迭代关系式(主要工作):递推数学模型一般是带下标字母,算法设计中要将其转化为:“循环不变式”--迭代关系式。而所谓的迭代关系式就是一个直接或间接地不断旧值递推新值的表达式
  3. 对迭代过程进行控制:一般分为两种情况,一种是已知或可以计算出来所需的迭代次数,这时可以构建一个固定次数的循环来实现对迭代过程的控制。另外是所需的迭代次数无法确定,需要分析出迭代过程的结束条件,甚至于要考虑有可能得不到目标解的情况,避免出现迭代过程的死循环。


递推法


基础概念:

递推法算法是最基本的表现形式,从小规模的问题推解出大规模问题的一种方法,也称其“正推”。如累加过程就是求出前n-1项和的基础上推出前n项和的,递推公式是Sn=Sn-1 +An。由于无须保存每次的累加结果。所以用一个迭代变量s存储每次的累加结果,累加对象存储在变量a中,这样的递推公式就抽象成 “循环不变” 的累加式: S=s+a


Case1:

一对兔子从出生后第三个月开始,每月生一对小兔子,小兔子到第三月又开始生下一代小兔子,假若兔子只生不死,一月份抱来一对刚出生的小兔子,问一年中每个月各有多少对兔子?


问题分析:

用枚举法:将问题的求解过程以及各种不同情况一一列举出来,从中发现解决问题的方法。

因为一对兔子是要第三个月才可以生,那么第三个月存在两对,而另外一对要第三个月才能出生,因此列出兔子第三个月的对数就是两个月兔子对数的和。过程如下:

月份 1月 2月 3月 4月 5月 6月 .........
对数 1 1 1+1=2 2+1=3 3+2=5 5+3=8 ........

数学建模:

y1=y2=1,yn=yn-1+yn-2,n=3,4,5........ 其实可以发现是斐波那契数列

算法设计:

a,表示成每月的前2个月的对数,b表示前1一个月的兔子的对数,它们的初值均为1,这样3月份兔子对数为 c =a+;

求4月份兔子的对数时,先将4月份前2个月和前1月兔子的对数存储在变量a,b中,即a=b,b=c,再将4月份兔子的对数继续保存在变量c中,即c=a+b+.......当然这要操作,在变量中的数据被覆盖之前应先行输出已求解的结果。

算法1如下:

main(){
    int i,a=1,b=1;
    coout<<a<<b;
    for(i=1;1<=10;i=i+1){
        c=a+b;
        cout<<c;
        a==b;
        b==c;
    }
}
复制代码


构造“不变式”不止一种,当然也可以做如下表:

月份 1 2 3 4 5 6 7
对数 a b c=a+b a=b+c b=a+c c=a+b ....

由上表可知:只是做了“c=a+b a=b+c b=a+c”,循环该不变式,这样一次循环其实是递推了3步,循环次数自然而然就要减少了


算法2如下:

main(){
int i,a=1,b=1;
    cout<<a<<b;
    for(i=1;1<=4;i++){  
        c=a+b;
        a=b+c;
        b=a+c;
        cout<<a<<b;
    }
}
复制代码


可是算法2最后输出的并不是12项,而是2+3*4=12项,这样的算法不算太好。因此,我们发现前面算法1,2基本思路都是基于这样一个事实:前三个月的数据输出后就无法保存了,从而构造了循环的“不变式”。其实一个赋值语句的执行过程是众所周知的---赋值过程是先计算后赋值,这样以上递推过程就无须引入第三个变量。 因此如下表递推迭代表达式:

月份 1 2 3 4 5 6
对数 a b a=a+b b=a+b a=a+b b=a+b

由此可以知道循环不变式为“a=a+b b=a+b”


算法3如下:

main(){
int i,a=1,b=1;
    cout<<a<<b;
    for(i=1;1<=5;i++){  
        a=a+b;
        b=a+b;
        cout<<a<<b;
    }
}
复制代码


总结:

后两种解法是在通过有限的变量,存储信息的基础上,在递推过程中发现“重复的周期”,实际上用的比较少。如果从周期角度讨论,case的算法和其他循环算法的周期都是“1”。

目录
相关文章
|
1天前
|
机器学习/深度学习 算法 TensorFlow
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
动物识别系统。本项目以Python作为主要编程语言,并基于TensorFlow搭建ResNet50卷积神经网络算法模型,通过收集4种常见的动物图像数据集(猫、狗、鸡、马)然后进行模型训练,得到一个识别精度较高的模型文件,然后保存为本地格式的H5格式文件。再基于Django开发Web网页端操作界面,实现用户上传一张动物图片,识别其名称。
15 1
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
|
11天前
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
47 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
1月前
|
存储 人工智能 自然语言处理
算法、系统和应用,三个视角全面读懂混合专家(MoE)
【8月更文挑战第17天】在AI领域,混合专家(MoE)模型以其独特结构成为推动大型语言模型发展的关键技术。MoE通过动态选择专家网络处理输入,实现条件计算。稀疏型MoE仅激活部分专家以减少计算负担;软MoE则加权合并专家输出提升模型稳定性。系统层面,MoE优化计算、通信与存储,利用并行化策略提高效率。在NLP、CV、推荐系统等领域展现强大应用潜力,但仍面临训练稳定性、可解释性等挑战。[论文链接: https://arxiv.org/pdf/2407.06204]
180 63
|
1天前
|
机器学习/深度学习 存储 人工智能
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
使用Python作为开发语言,基于文本数据集(一个积极的xls文本格式和一个消极的xls文本格式文件),使用Word2vec对文本进行处理。通过支持向量机SVM算法训练情绪分类模型。实现对文本消极情感和文本积极情感的识别。并基于Django框架开发网页平台实现对用户的可视化操作和数据存储。
9 0
文本情感识别分析系统Python+SVM分类算法+机器学习人工智能+计算机毕业设计
|
16天前
|
资源调度 算法
基于迭代扩展卡尔曼滤波算法的倒立摆控制系统matlab仿真
本课题研究基于迭代扩展卡尔曼滤波算法的倒立摆控制系统,并对比UKF、EKF、迭代UKF和迭代EKF的控制效果。倒立摆作为典型的非线性系统,适用于评估不同滤波方法的性能。UKF采用无迹变换逼近非线性函数,避免了EKF中的截断误差;EKF则通过泰勒级数展开近似非线性函数;迭代EKF和迭代UKF通过多次迭代提高状态估计精度。系统使用MATLAB 2022a进行仿真和分析,结果显示UKF和迭代UKF在非线性强的系统中表现更佳,但计算复杂度较高;EKF和迭代EKF则更适合维数较高或计算受限的场景。
|
23天前
|
存储 算法
读《趣学算法》:重开算法之门,神奇的兔子数列(斐波那契数列)
本文通过《趣学算法》中的斐波那契数列问题,探讨了算法的递归实现、时间复杂度分析,并展示了如何通过迭代和优化存储空间来改进算法,最终将时间复杂度从指数级降低到线性级,并将空间复杂度从线性级降低到常数级。
41 0
读《趣学算法》:重开算法之门,神奇的兔子数列(斐波那契数列)
|
6天前
|
算法
基于极大似然算法的系统参数辨识matlab仿真
本程序基于极大似然算法实现系统参数辨识,对参数a1、b1、a2、b2进行估计,并计算估计误差及收敛曲线,对比不同信噪比下的误差表现。在MATLAB2022a版本中运行,展示了参数估计值及其误差曲线。极大似然估计方法通过最大化观测数据的似然函数来估计未知参数,适用于多种系统模型。
|
1月前
|
存储 NoSQL 算法
实战算法篇:设计短域名系统,将长URL转化成短的URL.
小米介绍了一种实用的短域名系统设计,用于将冗长的URL转化为简短链接。短链接不仅节省空间,便于分享,还能支持数据分析。系统通过唯一编号结合62进制转换生成短标识,并利用如Redis这样的数据库存储长链接与短标识的映射关系。最后,通过302重定向实现用户访问时的长链接恢复。这一方案适用于多种场景,有效提升用户体验与数据追踪能力。
45 9
|
1月前
|
机器学习/深度学习 自然语言处理 负载均衡
揭秘混合专家(MoE)模型的神秘面纱:算法、系统和应用三大视角全面解析,带你领略深度学习领域的前沿技术!
【8月更文挑战第19天】在深度学习领域,混合专家(Mixture of Experts, MoE)模型通过整合多个小型专家网络的输出以实现高性能。从算法视角,MoE利用门控网络分配输入至专家网络,并通过组合机制集成输出。系统视角下,MoE需考虑并行化、通信开销及负载均衡等优化策略。在应用层面,MoE已成功应用于Google的BERT模型、Facebook的推荐系统及Microsoft的语音识别系统等多个场景。这是一种强有力的工具,能够解决复杂问题并提升效率。
43 2
|
1月前
|
算法 数据安全/隐私保护
基于LS算法的OFDM+QPSK系统信道估计均衡matlab性能仿真
基于MATLAB 2022a的仿真展示了OFDM+QPSK系统中最小二乘(LS)算法的信道估计与均衡效果。OFDM利用多个低速率子载波提高频谱效率,通过循环前缀克服多径衰落。LS算法依据导频符号估计信道参数,进而设计均衡器以恢复数据符号。核心程序实现了OFDM信号处理流程,包括加性高斯白噪声的加入、保护间隔去除、快速傅立叶变换及信道估计与均衡等步骤,并最终计算误码率,验证了算法的有效性。
48 2