for循环运行时分析java

-1 java big-o big-theta

对于所有这些,我必须找出运行时间.

1.

for ( int i = 0; i < n; i+=2 )
    sum++;
Run Code Online (Sandbox Code Playgroud)

2.

for ( int i = 1; i < n; i*=2 )
    sum++
Run Code Online (Sandbox Code Playgroud)

3.

for ( int i = 0; i < n; i++ )
    for ( int j = 0; j < n; j++ )
        sum++;
Run Code Online (Sandbox Code Playgroud)

4.

for ( int i = 0; i < n; i++ )
    sum++
for ( int j = 0; j < n; j++ )
    sum++
// The above are two loops one after the other, NOT nested
Run Code Online (Sandbox Code Playgroud)

5.

for ( int i = 0; i < 2*n; i++ )
    sum++
Run Code Online (Sandbox Code Playgroud)

6.

for ( int i = 0; i < n*n; i++ )
    sum++;
Run Code Online (Sandbox Code Playgroud)

7.

for ( int i = 0; i < n; i++ )
    for ( int j = 0; j < n*n; j++ )
        sum++;
Run Code Online (Sandbox Code Playgroud)

8.

for ( int i = 0; i < n; i++ )
    for ( int j = 0; j < 10000; j++ )
        sum++;
Run Code Online (Sandbox Code Playgroud)

第一个是O(n),第四个是O(n ^ 2).这些是正确的吗?我怎么做其他人?我真的很困惑第二个.

答案可以用大O或大theta表示.

jh3*_*314 5

基本上,您可以计算操作次数n.

例如:

for ( int i = 0; i < n; i+=2 )
    sum++;
Run Code Online (Sandbox Code Playgroud)

sum++是一个操作,你循环n/2时间.因此,此代码执行n/2操作.因此,大O是O(n/2) = O(n)(你可以抛弃常数因子1/2).

对于其他问题,只需执行相同的操作(计算sum++执行的次数,然后通过抛出常量来简化).