Discussion Of "Order Of" Notation

(O(f(n))

 

It is of interest to understand the behavior of programs relative to the amount of input data.

If a program has a for loop such as:

for(int i=0; i<n; i++){...}

We designate this as O(n) read Order n effort.

If we have nested for loops such as:

for(int i=0; i<n; i++)
   for(int j=0; j<n; j++){...}

We designate this as O(n2) read Order n squared effort.

In asymptotic analysis, we ignore constants and lower order terms.  So if the amount of effort is:

O(7n3+2n2+n+5)  we say that this is approximately O(n3) effort.

Anytime we divide the amount of data by 2, we are reducing the amount of effort by log2 so in a binary search, which divides the amount of data considered by 2 each time it is encountered, we say that we are expending O(log(n)) effort.

The practical limit to algorithms that must handle large data sets is O(n*log(n)) and algorithm of this type would be the quick sort which does n iterations and divides the data by 2 each time it encounters it.  The bubble sort which is O(n2) effort is not good for large data sets.