递推公式的优化——矩阵乘方

本文介绍斐波那契数列的四种常见计算方法,并重点讲解如何使用矩阵乘方进行优化,达到O(log n)的时间复杂度。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

想必大家对魔鬼序列:斐波那契数列都不陌生吧

F(n+2)=F(n+1)+F(n)

用编程实现的时候,有四种常见的方法:(当然一个比一个更为优化)

1.天真算法,求哪个就循环去求哪个呗,这样F(0),F(1)...前面的这些会重复好多遍计算,当然慢了。

2.由底至上的方法,用数组保存起来,按照顺序一个个往上计算,这样就可以避免重复了。

3.利用通式,跟由底至上的时间效率差不多。

4.矩阵乘方。

由通式可得,斐波那契数列是个二阶递推数列,

因此,存一个二维矩阵A,使得

(Fn+2,Fn+1)=(Fn+1,Fn)*A;

有规律可得,A=(1 1

      1 0),呵呵这是个二维矩阵。

(Fn+2,Fn+1)=(Fn+1,Fn)*A=(Fn,Fn-1)*A^2...=(F1,F0)*A^(n+1)

即:(Fn+1 Fn   =(  1  1     ^n;这个写的有些抽象了偷笑

           Fn     Fn-1)      1  0)

在实际中,再采用快速幂的方法求,这样一来时间效率就优化为O(㏒n);

具体快速幂,请看下面的链接:

http://blog.youkuaiyun.com/masked__dance/article/details/40264411

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值