我想通过使用归纳f(n)= 0来找出这个函数的时间复杂度,如果n = 0
f(n)= f(n - 1)+ 2n - 1,如果n≥1Im使用方法调用重复替换,那么我找到f(n)的近似形式
f(n)= f(n - 1)+ 2n - 1 = f(n-2)+ 4n-4 = f(n-3)+ 6n-8 .... = f(ni)+ 2 ^在-d
然后通过取i = ni得出f(n)= f(0)+ 2 ^(n + 1)-d并且可以得出结论,其具有O(2 ^ n)的时间复杂度,因为f (0)和d都是常数。
然而我发现答案应该是O(n ^ 2)我在哪里做错了
答案 0 :(得分:1)
你的数学错了。
f(n) = f(n - 1) + 2n - 1
f(n) = f(n - 2) + 4n - 4
f(n) = f(n - 3) + 6n - 9
...
f(n) = f(n - i) + 2i n - i^2
当i = n时,你有:
f(n) = f(n - n) + 2n n - n^2
= f(0) + (2 - 1) n^2
= n^2
因此,f(n)是O(n ^ 2)
然而你错了。这不是函数的时间复杂度,它是O(n),因为它有多少递归,这是函数的顺序,这意味着它“如何快速地发散”。 O(n ^ 2)表示函数以二次速率发散。
答案 1 :(得分:0)
我不完全理解这个问题。计算该值的复杂性为O(n),因为您可以从0开始计算:
f(0) = 0
f(1) = 0 + 2*1 - 1 = 1
f(2) = 1 + 2*2 - 1 = 4
f(3) = 4 + 2*3 - 1 = 9
实际上,你可能已经明白了。 。 。第n个值是n ^ 2。我在问题的背景下猜测这是他们想要的答案。但是,计算它似乎是O(n)。