このコードの漸近的な複雑さを教えてください。
f(n):
if (n<=2) then return 1;
else {
if (n>950) then { i=n/2; return f(i);}
else return f(n-2);
}
私は2つの解決策を考えました。
a)
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 より大きい場合、アルゴリズムは i が 950 より小さくなるまで f(i) を呼び出し、その後 f(n-2) の呼び出しを続行するため、最後の 2 つのステートメントの複雑さについてはよくわかりません。したがって、他の解決策は次のとおりです。
O(1) when n<=2
T(n/2) + T(n-2) + 1 otherwise
そして再発を解決します:
O(1) when n<=2
O(n^2) otherwise
実際には2番目が正しいと思いますが、よくわかりません。ご協力いただきありがとうございます。