COP 3530 Spring2012 Data Structures & Algorithms Discussion Session Week 5 Outline • Growth of functions – Big Oh – Omega – Theta – Little Oh Growth of Functions Gives a simple view of the algorithm’s efficiency. Allows us to compare the relative performance of alternative algorithms. f1(n) is O(n) f2(n) is O(n^2) Growth of Functions Exact running time of an algorithm is usually hard to compute, and it’s unnecessary. For large enough inputs, the lower-order terms of an exact running time are dominated by high-order terms. f(n) = n^2 + 5n + 234 n^2 >> 5n + 234, when n is large enough Asymptotic Notation: Big Oh (O) f(n)= O(g(n)) iff there exist positive constants c and n0 such that f(n) ≤ cg(n) for all n ≥ n0 O-notation to give an upper bound on a function Asymptotic Notation: Big Oh (O) Example 1[linear function] f(n) = 3n+2 For n >= 2, 3n+2 <= 3n+n <= 4n. So f(n) = O(n). We can arrive the same conclusion in other ways. For example, 3n + 2 <= 10n for n > 1. The specific values of c and n0 used to satisfy the definition of big oh are not important, we only say f(n) is big oh of g(n). c/n0 do not matter. Asymptotic Notation: Big Oh (O) Example 2[quadric function] f(n) = 10n^2+4n+2 For n >= 2, f(n) <= 10n^2+5n. For n>= 5, 5n < n^2. Hence for n>= n0 = 5, f(n) <= 10n^2+n^2 = 11n^2. Therefore, f(n) = O(n^2). Only the highest order term matters !!! Asymptotic Notation: Big Oh (O) Example 3[exponential function] f(n) = 6*2^n + n^2 For n>=4, n^2 <= 2^n. f(n) <= 6*2^n + 2^n = 7*2^n for n>=4 Therefore, 6*2^n + n^2 = O(2^n) Example 4[constant function] f(n) = 3 For any n, f(n) <= 4*1 Therefore, f(n) = O(1) Asymptotic Notation: Big Oh (O) Example 5[loose bounds] f(n) = 3n+3 For n >= 10, 3n+3 <= 3n^2. Therefore, f(n) = O(n^2). Usually, we mean tight upper bound when using big oh notation. Example 6[Incorrect bounds] 3n+2 != O(1) since we cannot find n0/c such that 3n + 2 <= c, when n>=c0 (n can be infinity). Similarly, 10n^2 + 6n + 2 != O(n). Asymptotic Notation: Big Oh (O) The specific values of c and n0 used to satisfy the definition of big oh are not important, we only say f(n) is big oh of g(n). c/n0 do NOT matter, WHY? f(n)=n. It’s close to 10n when comparing with n^2, n^3 f(n) is relatively small when n<n0 Asymptotic Notation: Omega Notation Big oh provides an asymptotic upper bound on a function. Omega provides an asymptotic lower bound on a function. Asymptotic Notation: Omega Notation Example 7 f(n) = 3n+3 > 3n for all n. So f(n) = Omega(n) Example 8[loose bounds] f(n) = 3n+3 > 1 for all n, so f(n) = Omega(1) Asymptotic Notation: Theta Notation Theta notation is used when function f can be bounded both from above and below by the same function g Asymptotic Notation: Theta Notation Example 9: f(n) = 3n+3 is Theta(n), since n <= 3n+3 <= 4n, when n >= 3. Similarly, f(n) = 3n+2 is Theta(n) f(n) = 5n^2 - 10n + 9 is Theta(n^2) f(n) is Theta(g(n)) iff f(n) is Omega(g(n)) and O(g(n)) Asymptotic Notation: Little oh (o) The asymptotic upper bound provided by O-notation may or may not be asymptotically tight. 2n = O(n) is tight, 2n = O(n^2) is not tight. We use o-notation to denote an upper bound that is NOT asymptotically tight. Asymptotic Notation: Little oh (o) f(n) = o(g(n)) iff f(n) = O(g(n)) and f(n) != Omega(g(n)) Example 10 3n+2 = o(n^2) as 3n+2 = O(n^2) and 3n+2 != Omega(n^2) Example 11 3n+2 != o(n) as 3n+2 = Omega(n) Review Big oh: upper bound on a function. Omega: lower bound. Theta: lower and upper bound. - f(n) is Theta(g(n)) iff f(n) is O(g(n)) and Omega(g(n)) Little oh: loose upper bound. - f(n) = o(g(n)) iff f(n) = O(g(n)) and f(n) != Omega(g(n)) Office Hour This Week: Thursday 9th period at E309