斐波那契数列 logn

本文介绍了如何将斐波那契数列的时间复杂度降低到logn,通过矩阵表示递推关系,并利用矩阵快速幂进行计算。详细阐述了矩阵乘法和递推矩阵的构造方法,提供了相关代码实现。
摘要由CSDN通过智能技术生成

分析

  我们都知道常规解法这个数列存在这个等式 , F(n) = F(n-1) + F(n-2) , 我们通过递归的时间复杂度是 2的n 次方,通过迭代时间复杂度是 O(n)。
  可是这个菲薄那切数列里面还有一个数学规律,应用这个规律我们可以把时间复杂度降到 logn 。

做法

  F(n) = F(n-1) + F(n-2) 可以看出这个是一个递推数列,通过这个递推数列,我们必定可以用矩阵把这个递推式表示出来:
这里写图片描述

  如上面的计算过程这个n-2次方的矩阵,是可以以log2n解出来的,这个就跟快速幂一个道理了。

扩展

如果不是 F(n) = F(n-1) + F(n-2) , 是其他的递推式怎么计算状态矩阵呢?假设是下面这个递推式:
这里写图片描述
  根据上面,俩个列子,大家可以看出来状态矩阵其实,可以很快的一眼看出来,第一列就对应的 F(N) 的递推式的系数,如 F(n) = F(n-1) + F(n-3) , 可以得知 a=1,d=0,g=1。第二列对应的是F(n-1)的递推式,那么F(n-1)就等于F(n-1),那么答案就是b=1,e=0,h=0。 第三列对应的是F(n-2)的递推式,那么c=0,f=1,i=0。
  有一个快速算出状态矩阵的方法,根据上面这个矩阵,其实右边等式每一列的都是F(n-1),F(n-2),F(n-3)乘以相应的系数然后对应左边的一个值。这样很快的就可以算出状态矩阵进而算出最终答案。

矩阵得菲波那切结果

  若 F(n) = F(n-1) + ..+F(n-i),根据状态矩阵的n-i次方算出,最终矩阵结果后,最终答案F(n)就等于F(i),F(i-1),F(i-2)与最终的矩阵的第一列的相应元素乘积的和。
  如上面 斐波那契F(n) = F(n-1)+ F(n-2)
result = F(2)*matrix[0][0]+F(1)*matrix[0][1]

矩阵乘法

  正常的一个n阶的矩阵,它的乘法时间复杂度是O(n^3) , 但是在本题中,矩阵都是一个常数,所以每次对其的乘法计算都可以看成是O(1) , 所以主要的时间复杂度来自于它的幂次方这个函数,这个函数我们使用了特殊的技巧,做到了log

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值