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

简介: 该系列是基于有一定语言基础(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);
    }
}


目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
132 5
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
2月前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
355 55
|
3天前
|
算法
基于电导增量MPPT控制算法的光伏发电系统simulink建模与仿真
本课题基于电导增量MPPT控制算法,使用MATLAB2022a的Simulink进行光伏发电系统的建模与仿真,输出系统电流、电压及功率。电导增量调制(IC)算法通过检测电压和电流变化率,实时调整光伏阵列工作点,确保其在不同光照和温度条件下始终处于最大功率输出状态。仿真结果展示了该算法的有效性,并结合PWM技术调节逆变流器占空比,提高系统效率和稳定性。
|
1天前
|
存储 监控 算法
员工屏幕监控系统之 C++ 图像差分算法
在现代企业管理中,员工屏幕监控系统至关重要。本文探讨了其中常用的图像差分算法,该算法通过比较相邻两帧图像的像素差异,检测屏幕内容变化,如应用程序切换等。文中提供了C++实现代码,并介绍了其在实时监控、异常行为检测和数据压缩等方面的应用,展示了其实现简单、效率高的特点。
27 15
|
2月前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
132 66
|
1月前
|
负载均衡 算法
架构学习:7种负载均衡算法策略
四层负载均衡包括数据链路层、网络层和应用层负载均衡。数据链路层通过修改MAC地址转发帧;网络层通过改变IP地址实现数据包转发;应用层有多种策略,如轮循、权重轮循、随机、权重随机、一致性哈希、响应速度和最少连接数均衡,确保请求合理分配到服务器,提升性能与稳定性。
241 11
架构学习:7种负载均衡算法策略
|
26天前
|
存储 监控 算法
内网监控系统之 Go 语言布隆过滤器算法深度剖析
在数字化时代,内网监控系统对企业和组织的信息安全至关重要。布隆过滤器(Bloom Filter)作为一种高效的数据结构,能够快速判断元素是否存在于集合中,适用于内网监控中的恶意IP和违规域名筛选。本文介绍其原理、优势及Go语言实现,提升系统性能与响应速度,保障信息安全。
28 5
|
2月前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
220 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
1月前
|
算法
基于爬山法MPPT最大功率跟踪算法的光伏发电系统simulink建模与仿真
本课题基于爬山法MPPT算法,对光伏发电系统进行Simulink建模与仿真。使用MATLAB2022a版本,通过调整光伏电池的工作状态以实现最大功率输出。爬山法通过逐步优化工作点,确保光伏系统在不同条件下均能接近最大功率点。仿真结果显示该方法的有效性,验证了模型的正确性和可行性。
|
2月前
|
监控 算法 JavaScript
基于 Node.js Socket 算法搭建局域网屏幕监控系统
在数字化办公环境中,局域网屏幕监控系统至关重要。基于Node.js的Socket算法实现高效、稳定的实时屏幕数据传输,助力企业保障信息安全、监督工作状态和远程技术支持。通过Socket建立监控端与被监控端的数据桥梁,确保实时画面呈现。实际部署需合理分配带宽并加密传输,确保信息安全。企业在使用时应权衡利弊,遵循法规,保障员工权益。
52 7

热门文章

最新文章