次のアルゴリズムの実行時間をO表記で定義するのに苦労します。私の最初の推測はO(n)でしたが、反復と私が適用する数の間のギャップは安定していません。どのように私はこれを間違って定義しましたか?解決:T(n)= T(n/2)+ n/2 + 1
public int function (int n)
{
if (n == 0) {
return 0;
}
int i = 1;
int j = n ;
while (i < j)
{
i = i + 1;
j = j - 1;
}
return function (i - 1) + 1;
}
正確には、ビット-Oは、上限のためのものであるので、多くの可能な答えがあります。たとえば、このアルゴリズムがO(n * n)であると言うと、それは真実ですが、誤解を招きます。可能であれば、ビッグ・シータを使用して実行時間を記述することが通常は良い方法です。受け入れられた答えの分析は、ビッグ・シータに対しても同様に有効です。 –