I know the big-O complexity of this algorithm is O(n^2)
, but I cannot understand why.
int sum = 0; int i = 1; j = n * n; while (i++ < j--) sum++;
Even though we set j = n * n
at the beginning, we increment i and decrement j during each iteration, so shouldn't the resulting number of iterations be a lot less than n*n
?
O(2n) denotes an algorithm whose growth doubles with each addition to the input data set. The growth curve of an O(2n) function is exponential - starting off very shallow, then rising meteorically.
O(log n) - Logarithmic Complexity This means the algorithm takes longer per item on smaller datasets relative to larger ones. 1 item takes 1 second, 10 items takes 2 seconds, 100 items takes 3 seconds.
O(N²) represents the complexity of an algorithm, whose performance is proportional to the square of the size of the input elements. It is generally quite slow: If the input array has 1 element it will do 1 operation, if it has 10 elements it will do 100 operations, and so on.
Big O is a member of a family of notations invented by Paul Bachmann, Edmund Landau, and others, collectively called Bachmann–Landau notation or asymptotic notation. The letter O was chosen by Bachmann to stand for Ordnung, meaning the order of approximation.
During every iteration you increment i
and decrement j
which is equivalent to just incrementing i
by 2. Therefore, total number of iterations is n^2 / 2 and that is still O(n^2).
big-O complexity ignores coefficients. For example: O(n)
, O(2n)
, and O(1000n)
are all the same O(n)
running time. Likewise, O(n^2)
and O(0.5n^2)
are both O(n^2)
running time.
In your situation, you're essentially incrementing your loop counter by 2 each time through your loop (since j--
has the same effect as i++
). So your running time is O(0.5n^2)
, but that's the same as O(n^2)
when you remove the coefficient.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With