算法系统学习-最最简单递归算法分析和迭代法

递归算法分析

Case1:求n!

构造算法中的两个步骤:

  1. n!=n*(n-1)!
  2. 0!=1,1!=1

递归算法如下(以n=3为例) 调用过程为:

f(3)--f(2)--f(1)--f(2)---f(3)

---- 递归 -->-------回溯------->

递归调用其实是一个降低规模的过程,和一般算法一样,算法的起始模块通常也是终止模块。

当规模降为1 时,即递归到f(1)时,满足停止条件停止递归,开始回溯并计算。

  1. 从fact(1)=1返回到f(2);
  2. 计算2*f(1)=2返回到f(3);
  1. 计算3*f(2)=6;
  2. 结束递归。

拓展:

为了更好理解,可以把不同次递归调用当作调用了不同的模块(但实际上每次递归调用都是同一个算法模块,在每一次递归调用都是用一个特殊的结构“栈”,记录当前算法的执行状态,特别设置地址栈,用来记录当前算法的执行位置,以备回溯时正常返回,递归模块中的形式参数和局部变量虽然是定义为简单的变量,每次递归调用得到的值都是不同的,它们都是由“栈”来存储的)

递归算法效率分析法--迭代法

基本步骤:

先将递归算法简化成对应的递归方程,然后通过反复迭代,将递归方程的右端变换成一个级数,最后求级数的和。再估计和的渐近阶,或者,不求级数的和耐而直接估计级数的渐近阶,从而达到对递归方程解的渐近阶的估计。

拓展:

用迭代方法的估计递归算法的解,就是充分利用递归算法中递归关系,通过一定的代数,运算和数学分析的级数知识,得到问题的复杂度。

例如Case1:n!

算法的递归方程:

T(n)=T(n-1)+O(1)

其中O(1)为一次乘法操作,迭代求解过程如下:

T(n) =T(n-2)+O(1)+O(1)

=T(n-3)+O(1)+O(1)+O(1)

......

=O(1)+......+O(1)+O(1)

=n*O(1)

=O(n)

现在常用算法简介:

压缩算法:

  1. 无损压缩算法:文本数据压缩都是无损压缩,即还原后的文件和源文件完全相同。常见有:哈夫曼编码,算术编码,字节压缩算法和字典压缩算法。(各个具体就不详细说明,感兴趣的可以自己百度一下)
  2. 有损压缩算法:以音频数据的压缩技术为例,为了更高的编码效率,都允许一定程度的精度损失。

加密算法(内容较多,不具体详细讲解):

  1. 对称加密
  2. 非对称加密

人工智能算法

并行算法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值