这个函数的大O表示法

时间:2018-01-25 11:26:13

标签: recursion time-complexity big-o asymptotic-complexity

function A(n):
    if n ≤ 10 then
        return 1 fi;
    x := 0;
    for i = 1 to n do
        x := x + 1 od;
    return x * A(n/3) * A(n/6) * A(n/4)

我的第一个想法是,A(n / c)的每次调用都在O(log n)中,并且因为每个调用都有一个从1到n的for循环,所以它应该是O(n log n)。但是因为A()的每次调用也会引起3次,所以它也应该有点指数,对吧?

1 个答案:

答案 0 :(得分:2)

x的计算仅使用n步骤为n分配n。所以我们可以假设循环只是一个虚拟的return n * (A(n/3) ** 3); 步骤。

该功能的其余部分可以归结为:

n + n/3 + n/9 + ...

在每个递归步骤中,A除以3.这意味着我们有效地获得n/3之和直到E(i = 0, inf)达到< 0.5。

整个事情需要乘以3,但这本身并不会改变任何复杂性。现在这样的总和(n/(k^i)n/k-1收敛到O(n)k给定常数O(n)。当然,将实际划分为6或4也不会改变任何东西。

因此整个函数的复杂性为pip install ffmpeg_normalize