你能告诉我这段代码的渐近复杂度吗?
f(n):
if (n<=2) then return 1;
else {
if (n>950) then { i=n/2; return f(i);}
else return f(n-2);
}
我想到了两种解决方案。
一种)
O(1) when n<=2
T(n/2) + 1 when n > 950
T(n-2) + 1 when 950>=n>2
并解决重复问题:
O(1) when n<=2
Θ(log n) when n > 950
O(n^2) when 950>=n>2
b) 但是我不太确定最后两个语句的复杂性,因为如果 n 大于 950,算法将调用 f(i),直到 i 小于 950,然后继续调用 f(n-2)。所以,另一种解决方案是这个:
O(1) when n<=2
T(n/2) + T(n-2) + 1 otherwise
并解决重复问题:
O(1) when n<=2
O(n^2) otherwise
我实际上认为第二个是正确的,但我不确定。谢谢你的帮助。