请不要将问题与递归的斐波纳契混淆,后者的复杂性为2 ^ n。
这是我使用的斐波纳契迭代代码:
def f(n):
a, b = 0, 1
for i in range(0, n):
a, b = b, a + b
return a
我试图找到复杂性,我得到它T(n)= n * 4 + 4 = 4n + 4,但我得到的图形根本不是线性的,更多的是n ^ 2。例如:
print(timerf(250000)/timerf(50000))
这给了我25左右的结果。
我画了一个数字:
这表明斐波那契迭代方法应该具有复杂度n ^ 2。怎么解释这个?
答案 0 :(得分:6)
迭代方法的复杂性为O(n)*cost_of_addition
通常人们认为cost_of_addition
是一个常数,但在Fibonacci数字的情况下,我们很快就会超出这个假设。
由于F(n)
呈指数增长,因此其中的位数为O(n)
。因此产生的复杂性为O(n^2)
。
答案 1 :(得分:1)
可能原因是整数的加法不是恒定时间而是线性 - O (位数)