在O(1)时间复杂度中找到第n个Fibonacci数

时间:2014-04-05 23:51:06

标签: algorithm math

我想在 O(1)时间复杂度中找到第n个Fibonacci数。我知道黄金比率技术,但这对于非常大的输入来说是失败的。有没有其他方法可以找到它?

1 个答案:

答案 0 :(得分:3)

O(1)时间内无法找到斐波纳契数(没有    预处理)。

请注意,如果您要求输出为数字,则需要O(logN)位对其进行编码 - 您需要以某种方式编写它们 - 至少需要O(logN)次做到这一点。

  • 黄金比例技术也是O(logN),因为它需要 指数 - 你需要以n的幂来提高黄金比率。 指数是Omega(logN)函数 - 所以这个解决方案也是 O(logN),正如您所注意到的那样 - 由于大量数据而导致失败 舍入错误,当用大号加注时变得非常大 指数。

O(logN)中运行的有效替代方案是matrix formula: 提升矩阵:

1  1
1  0

n的力量中,给你:

F_(n+1)   F_n
F_n       F_(n-1)

F_i是第i个斐波纳契数。