算法系统学习-正的麻烦反着来呗!(迭代算法-倒推法)

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

倒推法


所谓的倒推法,是对某些特殊问题所采用的违反通常习惯的,从后向前推解问题的方法,正向推理比较麻烦时,反而在逆向推理中更加巧妙地解决问题。


Case1猴子吃桃问题


一只小猴子摘了若干个桃子,每天吃总数的一半多一个,到第十天的时候就剩一个桃子,请问原来有多少桃子?

建立数学模型:

每天的桃子总数为

a10=1, a9=(1+a10)*2, a8=(1+a9)*2, .....

算法设计:

由于每天的桃子数只依赖前一天的桃子数,所以用一个迭代变量代表桃子个数就可以了

ai=(1+ai)*2 i 取值为9,8,7,6,5,4....1

main(){
  int i,a;
    a=1;
    for(i=9;i>=1;i--){
    a=(a+1)*2;
        cout<<a;
    }
}
复制代码


由一个简单的小case对倒推法有一个简单的了解,让我们来看一个比较有趣的数学问题--“杨辉三角”


Case2杨辉三角(使用一维数组):


网络异常,图片无法展示
|

关于杨辉三角问题,具体我就不进行过多的阐述了,因为想必你们的体育老师应该也讲过吧。

算法分析:

第i层有i列需要求解的i个数据,若从第一列开向后计算求i行时,由于用一个一维数组存储,每求出一个数将覆盖掉第i-1行对应的存储的值。这 将导致下一个数无法计算。而倒推法却不会,因此迭代表达式为:

A[1]= A[i]=1

A[j]=A[j]+A[j-1] j=i-1 ,i-2, i-3.....2

i行 i-1行 i-1行

为输出方便可以转化一下格式:

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1


算法如下:

main(){
  int n,i,j, a[100];
    cin>>n;
    cout<<"1";cout<<"/n";
    a[1]=a[2]=1;
    cout<<a[1]<<a[2];
    for(i=3;i<=n;i++){
    a[1]=a[i]=1;
       for(j=i-1;j>1;j--){
       a[j]=a[j]+a[j-1];
       }
        for(j=1;j<=i;j++){
            cout<<a[j];
        }
    }
  cout<<"/n";
}
复制代码


迭代法解方程


Case1:求ax^3+bx^2+cx+d=0方程根的算法,系数a,b,c,d的值依次是1,2,3,4,由主函数输入。求x在1附近的一个实根并输出。

拓展:牛顿迭代法

牛顿迭代法又称切线法,它比一般的迭代法有更高的收敛速度。首先选择一个接近的函数f(x)零点的x0,计算对应的f(x0)和切线斜率f'(x) (f'(x)表示是函数的导数,求导是高数的内容不具体详细讲解,不懂的可以百度)然后计算穿过点(x0,f(x0))且斜率f'(x)的直线方程:

y=f(x0)+f'(x)(x-x0)

和x轴的交点的x坐标,也就是求如下方程的解:

0=f(x0)+f'(x)(x-x0)


迭代公式可以简化成:xn+1=xn-f(xn)/f'(n)

这就是有名的牛顿迭代公式,已经证明了,如果f'连续的,并且待求的零点x是孤立的,那么在零点x周围存在一个区域,只要初始值x0位于这个临近区域内,那么牛顿法必定收敛(关于收敛性也是高数的内容,就不详细讲解)

因此看完关于牛顿迭代,可得出算法如下:

main(){
  float a,b,c,d,fx;
    cout<<'系数a,b,c,d:'
    cout>>a>>b>>c>>d;
    fx=f(a,b,c,d);
    cout<<'方程的根'<<fx;
}
float a,b,c,d;
fx=f(a,b,c,d);
{
float x1=1,x0,f0,f1;
    do{
    x0=x1;
        f0=((a*x0+b)*x0+c)*x0+d;
        f1=(3*a*x0+2*b)*x0+c;
        x1=x0-f0/f1;
    }while(fabs(x1-x0)>=1e-4){
    return(x1);
    }
}


目录
相关文章
|
5月前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
5月前
|
算法
基于MPPT算法的光伏并网发电系统simulink建模与仿真
本课题基于MATLAB/Simulink搭建光伏并网发电系统模型,集成PV模块、MPPT算法、PWM控制与并网电路,实现最大功率跟踪与电能高效并网。通过仿真验证系统在不同环境下的动态响应与稳定性,采用SVPWM与电流闭环控制,确保输出电流与电网同频同相,满足并网电能质量要求。
|
6月前
|
数据采集 边缘计算 算法
遗传算法+多目标规划算法+自适应神经模糊系统(Matlab代码实现)
遗传算法+多目标规划算法+自适应神经模糊系统(Matlab代码实现)
161 4
|
7月前
|
机器学习/深度学习 算法 数据挖掘
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
没发论文的注意啦!重磅更新!GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究(Matlab代码实现)
220 0
|
6月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
399 2
|
6月前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
293 1
|
6月前
|
机器学习/深度学习 自然语言处理 算法
基于改进鲸鱼优化算法的微网系统能量优化管理研究(Matlab代码实现)
基于改进鲸鱼优化算法的微网系统能量优化管理研究(Matlab代码实现)
243 1
|
6月前
|
机器学习/深度学习 算法 算法框架/工具
256KB内存约束下的设备端训练:算法与系统协同设计——论文解读
MIT与MIT-IBM Watson AI Lab团队提出一种创新方法,在仅256KB SRAM和1MB Flash的微控制器上实现深度神经网络训练。该研究通过量化感知缩放(QAS)、稀疏层/张量更新及算子重排序等技术,将内存占用降至141KB,较传统框架减少2300倍,首次突破设备端训练的内存瓶颈,推动边缘智能发展。
394 6
|
7月前
|
机器学习/深度学习 边缘计算 算法
【状态估计】基于LMS类自适应滤波算法、NLMS 和 LMF 进行系统识别比较研究(Matlab代码实现)
【状态估计】基于LMS类自适应滤波算法、NLMS 和 LMF 进行系统识别比较研究(Matlab代码实现)
237 3
|
6月前
|
机器学习/深度学习 存储 算法
基于模型预测算法的混合储能微电网双层能量管理系统研究(Matlab代码实现)
基于模型预测算法的混合储能微电网双层能量管理系统研究(Matlab代码实现)
176 0

热门文章

最新文章