Tonks Gabriel

Greenhorn

Posts: 15

posted 5 years ago

Can anyone explain to me the difference between:

For each of the following loops with a method call, determine the overall complexity. As above, assume that method f takes constant time, and that method g takes time linear in the value of its parameter.

1. for (j = 0; j < N; j++) f(j);

2. for (j = 0; j < N; j++) g(j);

3. for (j = 0; j < N; j++) g(k);

I understand why number 1 is O(n), but I don't get it why 2 and 3 are O(n^2). Can you explain it to me in a non-mathematical way. Thanks

For each of the following loops with a method call, determine the overall complexity. As above, assume that method f takes constant time, and that method g takes time linear in the value of its parameter.

1. for (j = 0; j < N; j++) f(j);

2. for (j = 0; j < N; j++) g(j);

3. for (j = 0; j < N; j++) g(k);

I understand why number 1 is O(n), but I don't get it why 2 and 3 are O(n^2). Can you explain it to me in a non-mathematical way. Thanks

Stephan van Hulst

Saloon Keeper

Posts: 7722

142

posted 5 years ago

Hi Tonks,

In the second case, you perform g(0), g(1), g(2), ..., g(N). If g performs in linear time, then the loop will take 0 + 1 + 2 + ... + N to complete, or (N^2)/2. The division by 2 has no bearing on the complexity. The complexity class only considers the degree of the polynomial, in this case N^2.

The third case has a wrong answer. The answer is O(N*k), or O(N) if k remains constant. Since k is a constant, the method call will always perform in constant time.

In the second case, you perform g(0), g(1), g(2), ..., g(N). If g performs in linear time, then the loop will take 0 + 1 + 2 + ... + N to complete, or (N^2)/2. The division by 2 has no bearing on the complexity. The complexity class only considers the degree of the polynomial, in this case N^2.

The third case has a wrong answer. The answer is O(N*k), or O(N) if k remains constant. Since k is a constant, the method call will always perform in constant time.

*The mind is a strange and wonderful thing. I'm not sure that it will ever be able to figure itself out, everything else, maybe. From the atom to the universe, everything, except itself.*

Tonks Gabriel

Greenhorn

Posts: 15

Stephan van Hulst

Saloon Keeper

Posts: 7722

142

posted 5 years ago

Yes, linear time is O(n). Why do you ask?

As for your examples, the only thing that matters is the degree (the highest power) of the polynomial.

For your three examples, those would be O(n^3), O(mk(n^3) + (k^2)(n^3)) and O(2^n). The second one can be simplified to O(n^3) if m increases less fast that cubic time, and k increases less fast than power 1.5 time.

As for your examples, the only thing that matters is the degree (the highest power) of the polynomial.

For your three examples, those would be O(n^3), O(mk(n^3) + (k^2)(n^3)) and O(2^n). The second one can be simplified to O(n^3) if m increases less fast that cubic time, and k increases less fast than power 1.5 time.

Stephan van Hulst

Saloon Keeper

Posts: 7722

142

It is sorta covered in the JavaRanch Style Guide. |