我有算法
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)的复杂性,因为这是更糟糕的情况,或者在这种情况下复杂性是完全不同的?
答案 0 :(得分:1)
你通常会耸耸肩说“是的,这个分支有O(x),所以它至少是那么糟糕。”
但如果我们有点聪明,我们可以看到你的算法有一个基本情况是O(1),然后是另外两种情况:偶数和奇数。
如果均匀,问题规模减少一半。
如果为奇数,问题大小在减半之前递减1(由于减1;)
最糟糕的情况是,每减少一个偶数后的数字是一个奇数,但这仍然很好,因为它减少到O(log(n))
。