for循环运行时分析java

时间:2014-04-21 21:25:41

标签: java big-o big-theta

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

1

for ( int i = 0; i < n; i+=2 )
    sum++;

2。

for ( int i = 1; i < n; i*=2 )
    sum++

3

for ( int i = 0; i < n; i++ )
    for ( int j = 0; j < n; j++ )
        sum++;

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

5

for ( int i = 0; i < 2*n; i++ )
    sum++

6

for ( int i = 0; i < n*n; i++ )
    sum++;

7

for ( int i = 0; i < n; i++ )
    for ( int j = 0; j < n*n; j++ )
        sum++;

8

for ( int i = 0; i < n; i++ )
    for ( int j = 0; j < 10000; j++ )
        sum++;

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

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

2 个答案:

答案 0 :(得分:5)

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

E.g:

for ( int i = 0; i < n; i+=2 )
    sum++;

sum++是1次操作,您循环n/2次。因此,此代码执行n/2次操作。因此,大O是O(n/2) = O(n)(你可以抛出常数因子1/2)。

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

答案 1 :(得分:2)

一种正式但又乏味的方法,使用Sigma符号(离散数学)来提出增长复杂性的循环顺序。

1. Linear

enter image description here

2. Logarithmic

enter image description here

3. Nested Independent Loops

enter image description here

4. Independent Loops

enter image description here

5. Linear

enter image description here

6. Quadratic

enter image description here

7. Independent Nested Loops

enter image description here

8. Independent Nested Loops

enter image description here