使用矩阵生成Fibonacci系列

时间:2013-07-22 06:12:30

标签: java algorithm fibonacci

关于Fibonacci Series发布了一个问题,我对此非常熟悉。但是有多个答案和相关问题。当我正兴趣地挖掘它时,有一个linked to here

的解决方案

该算法通过O(log(n))解决问题令人印象深刻。但我无法理解逻辑和所谓的矩阵指数[看起来维基,但无法与它相关]。

所以,任何人都可以通过更多细节和更好的解释来确切地解释他们是如何实现的[如果你能用代码解释,更喜欢用Java,那就非常有帮助。]

谢谢:)

1 个答案:

答案 0 :(得分:1)

您需要了解的是算法,而不是实现。

你需要了解的第一件事是这个算法不会给你所有的斐波那契数,只有那些 n 是2的幂。

第二件事是,常量大小的矩阵的乘法当然需要不变(O(1))时间。

现在的诀窍是要正确地注意到第n个斐波纳契数可以通过链接中描述的矩阵的n倍乘法形成,我称之为 M

现在通过将矩阵运算“重新排序”从例如M *(M *(M * M))到(M * M)*(M * M)来获得对数复杂度。对于每个矩阵平方,您将转到 M ^ 2n而不是 M ^ n + 1。