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
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.
Joined: Feb 23, 2012
I thought Linear time is O(n)?
Also, how would you determine the big o notation of the following given:
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.