Asymptotic Notation
Asymptotic notation is a way of expressing the cost of an algorithm. Goal of Asymptotic notation is to simplify Analysis by getting rid of unneeded information
Following are the asymptotic notation:
Big–Oh Notation (O) : 
>> O(g(n)) = { f(n) : there exist positive constants c and n_{0} such that 0 < f(n) < c*g(n) for all n > n_{0 }}.
>> It is asymptotic upper bound.
>>The function f(n) = O(g(n)) iff there exist positive constants c and n0 such that f(n) ≤ c * g(n) for all n, n ≥ n0.
>> The statement f(n) = O(g(n)) states only that g(n) is an upper bound on the value of f(n) for all n, n ≥ no.
>> Eg :
1. 3n + 2 = O(n)
3n + 2 ≤ 4n for all n ≥ 2.
2. 3n + 3 = O(n)
3n + 3 ≤ 4n for all n ≥ 3.
3. 100n + 6 = O(n)
100n + 6 ≤ 101n for all n ≥ 6.

Omega Notation (Ω) 
>> Ω (g (n)) = { f(n) : there exist positive constants c and n0 such that 0 < c * g(n) < f(n) for all n > n0 }
>> Asymptotic lower bound.
>> The function f(n) = Ω(g(n)) iff there exist positive constants c and n0 such that f(n) ≥ c * g(n) for all n, n ≥ n0.
>> The statement f(n) = Ω(g(n)) states only that g(n) is only a lower bound on the value of f(n) for all n, n ≥ no.
>> E.g.
1. 3n + 2 = Ω(n)
3n + 2 ≥ 3n for all n ≥ 1.
2. 3n + 3 = Ω(n)
3n + 3 ≥ 3n for all n ≥ 1.
3. 100n + 6 = Ω(n)
100n + 6 ≥ 100n for all n ≥ 0. 
Theta Notation (Θ) 
>> Θ(g(n)) = { f(n) : there exist positive constants c1 and c2 and n0 such that 0 < c1 * g(n) < f(n) < c2 * g(n) for all n > n0 }
>> The function f(n) = Θ(g(n)) iff there exist positive constants C1, C2 and n0 such that C1 * g(n) ≤ f(n) ≤ C2 * g(n) for all n, n ≥ n0.
>> E.g.
1. 3n + 2 = Θ(n)
3n + 2 ≥ 3n for all n ≥ 2.
3n + 2 ≤ 4n for all n ≥ 2.
So, C1 = 3, C2 =4 & n0 =2.
>> The statement f(n) = Θ(g(n)) iff g(n) is both an upper and lower bound on the value of f(n). 
Little oh Notation (o) 
>> o(g(n)) = { f(n) : for any positive constant c>0 , there exists a constant n0 such that 0 < f(n) < c * g(n) for all n > n0 }
>> We use o notation to denote an upper bound that is not asymptotically tight.
>> The definitions of Onotation and onotation are similar. The main difference is that in f(n) =O(g(n)), the bound 0 < f(n) < c*g(n) holds for some constant c>0 but in f(n) =O(g(n)), the bound 0 < f(n) < c *g(n) holds for all constants c > 0. 
Little omega Notation (w) 
>> w(g(n)) = { f(n) : for any positive constant c>0 , there exists a constant n0 such that 0 < c * g (n) < f(n) for all n > n0 }
>> We use w notation to denote an lower bound that is not asymptotically tight. 