迭代的斐波那契复杂性,无法理解为什么它是O(n ^ 2)

时间:2014-09-16 11:47:12

标签: algorithm time-complexity fibonacci

请不要将问题与递归的斐波纳契混淆,后者的复杂性为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左右的结果。

我画了一个数字:

enter image description here

这表明斐波那契迭代方法应该具有复杂度n ^ 2。怎么解释这个?

2 个答案:

答案 0 :(得分:6)

迭代方法的复杂性为O(n)*cost_of_addition

通常人们认为cost_of_addition是一个常数,但在Fibonacci数字的情况下,我们很快就会超出这个假设。

由于F(n)呈指数增长,因此其中的位数为O(n)。因此产生的复杂性为O(n^2)

答案 1 :(得分:1)

可能原因是整数的加法不是恒定时间而是线性 - O (位数)