Skip to main content

Big-O Notation

Big-O Notation
Big-O Notation


Why ? How ?


To estimate the efficiency of an algorithm, the programmer has to be able to estimate the number of operations if requires to be executed. Usually the number of operations is estimated as a function of a parameter (like the number of data to work on, or the expected precision of a computation, etc.)

For example :

for(i = 0; i < n; i++) { ... }
has a cost proportional to n.
for(i = 1; i < n; i = i*2) { ... }
has a cost proportional to log2 n
for(i = 0; i < n; i++) for(j = 0; j<n*n; j++) { ... }
has a cost proportional to n3.




Definition of O(.)


The classical way to denote an approximation of a complexity is to use the O(.) notation (called “big-O”).  If n is a parameter and f(n) the exact number of operations required for that value of the parameter, then we will denote f(n) = O(T (n)) and say that f is a big-O of T if and only if :
∃c, N, ∀n ≥ N, f(n) ≤ c.T (n) it means that f is asymptotically bounded by a function proportional to T . 

Note : a same function can be bounded by different expressions, and the = symbol is odd. Using ∈ would have been a better choice.


Some O(.)


Usually the O(.) notation is useful to hide some superfluous details.

For example if f(n) = n2 + 3n than for

n ≥ 3
we have
3n ≤ n2
and thus
f(n) ≤ 2n2
Finally f(n) = O(n2).



Summing O(.)s


f1(n) = O(T (n)) and f2(n) = O(T (n)) ⇒ f1(n) + f2(n) = O(T (n))


Proof :

f1(n) = O(T (n)) ⇒ ∃c1,N1, ∀n ≥ N1, f1(n) ≤ c1 T (n)
f2(n) = O(T (n)) ⇒ ∃c2,N2, ∀n ≥ N2, f2(n) ≤ c2 T (n)

than we have

∀n ≥ max(N1,N2), f1(n) + f2(n) ≤ (c1 + c2)T (n)
The same proof works for products.


Combining O(.)s


f(n) = O(T (n)) and T (n) = O(S(n)) ⇒ f(n) = O(S(n))

Proof :

f(n) = O(T (n)) ⇒ ∃c,N, ∀n ≥ N, f(n) ≤ c T (n)
T (n) = O(S(n)) ⇒ ∃d,M, ∀n ≥ M, T (n) ≤ d S(n)
than we have
∀n ≥ max(N,M), f(n) ≤ c d S(n)




Popular posts from this blog

C++ Program to find the sum, difference, product and quotient of two integers

#include <iostream.h> #include <conio.h> void main() {   clrscr();   int x = 10;   int y = 2;   int sum, difference, product, quotient;   sum = x + y;   difference = x - y;   product = x * y;   quotient = x / y;   cout << "The sum of " << x << " & " << y << " is " << sum << "." << endl;   cout << "The difference of " << x << " & " << "y <<  is " << difference << "." << endl;   cout << "The product of " << x << " & " << y << " is " << product << "." << endl;   cout << "The quotient of " << x << " & " << y << " is " << quotient << "." << endl;   getch(); }

Program of virtual piano

//////////////Tested And Created By C++/////////////////////////////// #include<stdio.h> #include<dos.h> #include<conio.h> #include<stdlib.h> #define SHOW 1 #define HIDE 2 union REGS input,output; class piano {  public:int BIGKEY,MIDKEY,back,border;     piano()//init constructor     {         BIGKEY=15;         MIDKEY=1;         back=7;         border=15;     } }color; void drawpiano(int x,int y); int check_xy(int x,int y); void BOX(int c,int r,int c1,int r1,int col); int initmouse(); void setupscreen(); void pointer(int on); void restrictmouse(int x1,int y1,int x2,int y2); void check_keys(int x,int y); void getmouse(int *button,int *x,int *y); float freq[7] = {130.81, 146.83, 164.81, 174.61,196, 220, 246.94 } ; int n=0,a=4,backcolor=2,exitcode=1; void showbar(int t) {  if(t>65) t=65;  if(t<1) t=1;  textcolor(15);  for(int q=0;q<=t;t++)  {     gotoxy(3+q,4);     cprintf("Û");  } } void main() {  int

Putimage function in c

putimage function outputs a bit image onto the screen. Declaration:- void putimage(int left, int top, void *ptr, int op); putimage puts the bit image previously saved with getimage back onto the screen, with the upper left corner of the image placed at (left, top). ptr points to the area in memory where the source image is stored. The op argument specifies a operator that controls how the color for each destination pixel on screen is computed, based on pixel already on screen and the corresponding source pixel in memory. c smiling face animation This animation using c draws a smiling face which appears at random position on screen. See output below the code, it will help you in understanding the code easily. C programming code #include<graphics.h> #include<conio.h> #include<stdlib.h>   main() { int gd = DETECT, gm, area, temp1, temp2, left = 25, top = 75; void *p;   initgraph(&gd,&gm,"C:\\TC\\BGI");   setcolor(YELLOW);