我想在 O(1)时间复杂度中找到第n个Fibonacci数。我知道黄金比率技术,但这对于非常大的输入来说是失败的。有没有其他方法可以找到它?
答案 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个斐波纳契数。