斐波那契数列

8 篇文章 0 订阅
2 篇文章 0 订阅

斐波那契数列定义:
f i = 1 ( i ∈ [ 1 , 2 ] ) f_i=1(i\in[1,2]) fi=1(i[1,2])
f i = f i − 1 + f i − 2 ( i > 2 ) f_i=f_{i-1}+f_{i-2}(i>2) fi=fi1+fi2(i>2)
递推式明显,求 f n f_n fn的话 O ( n ) O(n) O(n)就珂以搞出来。
你觉得很快了?

还可以优化。
前置知识:
矩阵快速幂
对于每一个 f i f_i fi,只需要知道 f i − 1 和 f i − 2 f_{i-1}和f_{i-2} fi1fi2既珂。
定义列向量
D = [ f i f i − 1 ] D= \left[ \begin{matrix} f_i\\f_{i-1} \end{matrix} \right] D=[fifi1]
于是我们只要求出
[ f n f n − 1 ] \left[ \begin{matrix} f_n\\ f_{n-1}\\ \end{matrix} \right] [fnfn1]
的矩阵,然后访问 ( 1 , 1 ) (1,1) (1,1)就珂以了。
考虑如何从前一个矩阵转移到下一个矩阵?
f i = f i − 1 × 1 + f i − 2 × 1 f_i=f_{i-1}\times1+f_{i-2}\times1 fi=fi1×1+fi2×1
f i − 1 = f i − 1 × 1 + f i − 2 × 0 f_{i-1}=f_{i-1}\times1+f_{i-2}\times0 fi1=fi1×1+fi2×0
于是得到:
[ f i − 1 f i − 2 ] × [ 1 1 1 0 ] = [ f i f i − 1 ] \left[ \begin{matrix} f_{i-1}\\ f_{i-2}\\ \end{matrix} \right] \times \left[ \begin{matrix} 1&1\\ 1&0 \end{matrix} \right]= \left[ \begin{matrix} f_i\\ f_{i-1} \end{matrix} \right] [fi1fi2]×[1110]=[fifi1]
然后展开,合并,得到:
[ f n f n − 1 ] × [ 1 1 1 0 ] n − 2 = [ f 2 f 1 ] \left[ \begin{matrix} f_{n}\\ f_{n-1}\\ \end{matrix} \right] \times \left[ \begin{matrix} 1&1\\ 1&0\\ \end{matrix} \right]^{n-2}= \left[ \begin{matrix} f_2\\ f_1 \end{matrix} \right] [fnfn1]×[1110]n2=[f2f1]
初始化套进去,快速幂完事。
终结。
水的好爽

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值