分治-幂乘算法及应用

1. 幂乘问题

输入:
a为给定实数,n为自然数
输出:an

1.1 传统算法:顺序相乘

  1. a先与a相乘
  2. 结果再与a相乘
  3. 共计相乘n-1
    an = (…(((a a)a)a)…)a
    乘法次数:n - 1

1.2 分治算法:划分

在这里插入图片描述
简化:只用算出来一个n/2个a相乘,后面那一个n/2个a就不用算了

  • 时间复杂度:
    在这里插入图片描述

2. 幂乘算法的应用

Fibonacci数列:1, 1, 2, 3, …
增加 F0 = 0

2.1 问题:已知F0 = 0,F1 = 1,给定n,计算Fn

2.1.1 通常算法:

在这里插入图片描述

2.1.2 分治算法:

前导数学基础
在这里插入图片描述
用数学归纳法证明

  1. n = 1,左边 = 右边
  2. 假设对任意整数n成立
  3. 证明n = n + 1的时候成立
    即证明
    [ F   n + 2   F   n + 1   F   n + 1 F   n   ] = [ 1 1 1 0 ] n + 1 \left[ \begin{matrix} F~n+2~ & F~n+1~\\ F~n+1 & F~n~ \end{matrix} \right] = \left[ \begin{matrix} 1 & 1\\ 1 & 0 \end{matrix} \right] ^{n+1} [F n+2 F n+1F n+1 F n ]=[1110]n+1

    在这里插入图片描述
    Fn+2 = Fn+1 ×1 + Fn × 1
    Fn+2 = Fn+1 + Fn 成立
  4. 类似的,证明左边矩阵剩余三个元素
  5. 所以成立
  • 这时原问题就可以转化为
    在这里插入图片描述
    即可简化算法
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值