具有不同复杂度的分支的递归算法的时间复杂度

时间:2013-08-30 08:25:37

标签: big-o time-complexity

我有算法

def alg(a):
    if a == 0:
        return 1
    elif a % 2 == 1:
        return alg(a - 1)
    else:
        return alg(a / 2)

并不确定其复杂程度。一个分支具有O(N)的复杂度,而另一个分支具有O(log(N))。

在这种情况下,您是否说该算法具有O(N)的复杂性,因为这是更糟糕的情况,或者在这种情况下复杂性是完全不同的?

1 个答案:

答案 0 :(得分:1)

你通常会耸耸肩说“是的,这个分支有O(x),所以它至少是那么糟糕。”

但如果我们有点聪明,我们可以看到你的算法有一个基本情况是O(1),然后是另外两种情况:偶数和奇数。

如果均匀,问题规模减少一半。

如果为奇数,问题大小在减半之前递减1(由于减1;)

最糟糕的情况是,每减少一个偶数后的数字是一个奇数,但这仍然很好,因为它减少到O(log(n))