0
int i=1,s=1;
while(s<=n)
{
i++;
s=s+i;
}

これの時間計算量は O(root(n)) です。私はそれを理解していません。シリーズは 1+2+...+k のようになるためです。助けてください。

4

3 に答える 3

2

ループを実行させますxsこれで、が 未満である限り、ループが実行されnます。

我々は持っています :

1回目の反復
s = s + 1
後: 2回目の反復後:
s = s + 1 + 2

x回の反復が続くと、最終的には次のようになります

1 + 2 ... + x <= n

=>(x * (x + 1)) / 2 <= n

=> O(x^2)<= n

=> x= O (root(n))

于 2013-03-02T13:29:27.500 に答える
1

s(k) = 1 + 2 + 3 + ... k = (k + 1) * k / 2

s(k) >= n少なくともkステップが必要です。n = (k + 1) * k / 2、したがってk = -1/2 +- sqrt(1 + 4 * n)/2;

定数と係数を無視し、O(-1/2 + sqrt(1+4n)/2) = O(sqrt(n))

于 2013-03-02T13:33:16.893 に答える
0

これは合計を計算し、s(k)=1+2+...+kで停止しs(k) > nます。

であるため、 がを超えるs(k)=k*(k+1)/2ために必要な反復回数は です。s(k)nO(sqrt(n))

于 2013-03-02T13:28:22.170 に答える