Asymptotic Notation,
Review of Functions &
     Summations
          Asymptotic Complexity
 Running time of an algorithm as a function of
  input size n for large n.
 Expressed using only the highest-order term
  in the expression for the exact running time.
    Instead of exact running time, say (n2).
 Describes behavior of function in the limit.
 Written using Asymptotic Notation.
          Asymptotic Notation
 , O, , o, 
 Defined for functions over the natural numbers.
    Ex: f(n) = (n2).
    Describes how f(n) grows in comparison to n2.
 Define a set of functions; in practice used to compare
  two function sizes.
 The notations describe different rate-of-growth
  relations between the defining function and the
  defined set of functions.
                         -notation
For function g(n), we define (g(n)),
big-Theta of n, as the set:
(g(n)) = {f(n) :
 positive constants c1, c2, and n0,
such that n  n0,
we have 0  c1g(n)  f(n) 
c2g(n)
 }
Intuitively: Set of all functions that
have the same rate of growth as g(n).
g(n) is an asymptotically tight bound for f(n).
                          -notation
For function g(n), we define (g(n)),
big-Theta of n, as the set:
(g(n)) = {f(n) :
 positive constants c1, c2, and n0,
such that n  n0,
we have 0  c1g(n)  f(n) 
c2g(n)
 }
Technically,   f(n)  (g(n)).
Older usage, f(n) = (g(n)).
I’ll accept either…
f(n) and g(n) are nonnegative, for large n.
                    Example
 (g(n)) = {f(n) :  positive constants c1, c2, and n0,
 such that n  n0, 0  c1g(n)  f(n)  c2g(n)}
 10n2 - 3n = (n2)
 What constants for n0, c1, and c2 will work?
 Make c1 a little smaller than the leading
  coefficient, and c2 a little bigger.
 To compare orders of growth, look at the
  leading term.
 Exercise: Prove that n2/2-3n= (n2)
                    Example
 (g(n)) = {f(n) :  positive constants c1, c2, and n0,
 such that n  n0, 0  c1g(n)  f(n)  c2g(n)}
 Is 3n3  (n4) ??
 How about 22n (2n)??
                        O-notation
For function g(n), we define O(g(n)),
big-O of n, as the set:
O(g(n)) = {f(n) :
 positive constants c and n0,
such that n  n0,
we have 0  f(n)  cg(n) }
Intuitively: Set of all functions
whose rate of growth is the same as
or lower than that of g(n).
g(n) is an asymptotic upper bound for f(n).
f(n) = (g(n))  f(n) = O(g(n)).
(g(n))  O(g(n)).
                    Examples
  O(g(n)) = {f(n) :  positive constants c and n0,
  such that n  n0, we have 0  f(n)  cg(n) }
 Any linear function an + b is in O(n2). How?
 Show that 3n3=O(n4) for appropriate c and n0.
                         -notation
For function g(n), we define (g(n)),
big-Omega of n, as the set:
(g(n)) = {f(n) :
 positive constants c and n0,
such that n  n0,
we have 0  cg(n)  f(n)}
Intuitively: Set of all functions
whose rate of growth is the same
as or higher than that of g(n).
g(n) is an asymptotic lower bound for f(n).
    f(n) = (g(n))  f(n) = (g(n)).
    (g(n))  (g(n)).
                      Example
  (g(n)) = {f(n) :  positive constants c and n0, such
  that n  n0, we have 0  cg(n)  f(n)}
 n = (lg n). Choose c and n0.
Relations Between , O, 
       Relations Between , , O
 Theorem : For any two functions g(n) and f(n),
       f(n) = (g(n)) iff
      f(n) = O(g(n)) and f(n) = (g(n)).
 I.e., (g(n)) = O(g(n))  (g(n))
 In practice, asymptotically tight bounds are
  obtained from asymptotic upper and lower bounds.
               Running Times
 “Running time is O(f(n))”  Worst case is O(f(n))
 O(f(n)) bound on the worst-case running time 
  O(f(n)) bound on the running time of every input.
 (f(n)) bound on the worst-case running time 
  (f(n)) bound on the running time of every input.
 “Running time is (f(n))”  Best case is (f(n))
 Can still say “Worst-case running time is (f(n))”
    Means worst-case running time is given by some
     unspecified function g(n)  (f(n)).
                      Example
 Insertion sort takes (n2) in the worst case, so
  sorting (as a problem) is O(n2). Why?
 Any sort algorithm must look at each item, so
  sorting is (n).
 In fact, using (e.g.) merge sort, sorting is (n lg n)
  in the worst case.
    Later, we will prove that we cannot hope that any
     comparison sort to do better in the worst case.
Asymptotic Notation in Equations
 Can use asymptotic notation in equations to
  replace expressions containing lower-order terms.
 For example,
   4n3 + 3n2 + 2n + 1 = 4n3 + 3n2 + (n)
   = 4n3 + (n2) = (n3). How to interpret?
 In equations, (f(n)) always stands for an
  anonymous function g(n)  (f(n))
    In the example above, (n2) stands for
     3n2 + 2n + 1.
                     o-notation
 For a given function g(n), the set little-o:
o(g(n)) = {f(n):  c > 0,  n0 > 0 such that
             n  n0, we have 0  f(n) < cg(n)}.
f(n) becomes insignificant relative to g(n) as n
  approaches infinity:
                lim [f(n) / g(n)] = 0
              n
g(n) is an upper bound for f(n) that is not
  asymptotically tight.
Observe the difference in this definition from previous
  ones. Why?
                      -notation
 For a given function g(n), the set little-omega:
(g(n)) = {f(n):  c > 0,  n   > 0 such that
                                 0
              n  n0, we have 0  cg(n) < f(n)}.
f(n) becomes arbitrarily large relative to g(n) as n
   approaches infinity:
                      lim [f(n) / g(n)] = .
                   n
g(n) is a lower bound for f(n) that is not
  asymptotically tight.
Comparison of Functions
         fg  ab
 f (n) = O(g(n))  a  b
 f (n) = (g(n))  a  b
  f (n) = (g(n))  a = b
   f (n) = o(g(n))  a < b
 f (n) = (g(n))  a > b
                      Limits
 lim [f(n) / g(n)] = 0  f(n)  (g(n))
  n
 lim [f(n) / g(n)] <   f(n)  (g(n))
  n
 0 < lim [f(n) / g(n)] <   f(n)  (g(n))
        n
 0 < lim [f(n) / g(n)]  f(n) (g(n))
        n
 lim [f(n) / g(n)] =   f(n)  (g(n))
  n
 lim [f(n) / g(n)] undefined can’t say
  n
                   Properties
 Transitivity
   f(n) = (g(n)) & g(n) = (h(n))  f(n) = (h(n))
   f(n) = O(g(n)) & g(n) = O(h(n))  f(n) = O(h(n))
   f(n) = (g(n)) & g(n) = (h(n))  f(n) = (h(n))
   f(n) = o (g(n)) & g(n) = o (h(n))  f(n) = o (h(n))
   f(n) = (g(n)) & g(n) = (h(n))  f(n) = (h(n))
 Reflexivity
  f(n) = (f(n))
  f(n) = O(f(n))
 f(n) = (f(n))
               Properties
 Symmetry
 f(n) = (g(n)) iff g(n) = (f(n))
 Complementarity
  f(n) = O(g(n)) iff g(n) = (f(n))
  f(n) = o(g(n)) iff g(n) = ((f(n))
Common Functions
                   Monotonicity
 f(n) is
      monotonically increasing if m  n  f(m)  f(n).
      monotonically decreasing if m  n  f(m)  f(n).
      strictly increasing if m < n  f(m) < f(n).
      strictly decreasing if m > n  f(m) > f(n).
                    Exponentials
 Useful Identities:
           1    1
         a 
                 a
         (a m ) n a mn
         a m a n a mn
 Exponentials and polynomials
             nb
        lim n 0
        n  a
         n b o(a n )
                      Logarithms
                            a b logb a
x = logba is the
  exponent for a = bx.      log c (ab) log c a  log c b
                                    n
                            log b a n log b a
Natural log: ln a = logea
                                      log c a
Binary log: lg a = log2a
                            log b a 
                                      log c b
                            log b (1 / a )  log b a
lg2a = (lg a)2
lg lg a = lg (lg a)
                                        1
                            log b a 
                                      log a b
                            a logb c c logb a
Logarithms and exponentials – Bases
 If the base of a logarithm is changed from one
  constant to another, the value is altered by a
  constant factor.
   Ex: log10 n * log210 = log2 n.
   Base of logarithm is not an issue in asymptotic
    notation.
 Exponentials with different bases differ by a
  exponential factor (not a constant factor).
   Ex: 2n = (2/3)n*3n.
                   Polylogarithms
 For a  0, b > 0, lim n ( lga n / nb ) = 0,
  so lga n = o(nb), and nb = (lga n )
    Prove using L’Hopital’s rule repeatedly
 lg(n!) = (n lg n)
    Prove using Stirling’s approximation (in the text) for lg(n!).
                          Exercise
Express functions in A in asymptotic notation using functions in B.
A                                  B
 5n2 + 100n                      3n2 + 2             A  (B)
 A  (n2), n2  (B)  A  (B)
 log3(n2)                        log2(n3)            A  (B)
 logba = logca / logcb; A = 2lgn / lg3, B = 3lgn, A/B =2/(3lg3)
  nlg4                         3lg n               A  (B)
  alog b = blog a; B =3lg n=nlg 3; A/B =nlg(4/3)   as n
   lg2n                              n1/2                A  (B)
 lim ( lga n / nb ) = 0 (here a = 2 and b = 1/2)  A  (B)
 n
Summations – Review
      Review on Summations
 Why do we need summation formulas?
  For computing the running times of iterative
   constructs (loops). (CLRS – Appendix A)
  Example: Maximum Subvector
  Given an array A[1…n] of numeric values (can be
   positive, zero, and negative) determine the
   subvector A[i…j] (1 i  j  n) whose sum of
   elements is maximum over all subvectors.
       1       -2      2       2
               Review on Summations
 MaxSubvector(A, n)
      maxsum  0;
      for i  1 to n
        do for j = i to n
                  sum  0
                  for k  i to j
                      do sum += A[k]
                  maxsum  max(sum, maxsum)
      return maxsum
           n   n   j
T(n) =    1
         i=1 j=i k=i
NOTE: This is not a simplified solution. What is the final answer?
            Review on Summations
 Constant Series: For integers a and b, a  b,
                         b
                        1 b  a 1
                        i a
 Linear Series (Arithmetic Series): For n  0,
                  n
                                        n(n  1)
                     i 1  2   n 
                 i 1                      2
 Quadratic Series: For n  0,
                n
                                              n(n  1)(2n  1)
                  i 2 12  22    n 2 
                 i 1                                6
          Review on Summations
 Cubic Series: For n  0,
                    n                               2          2
                          3   3     3         3   n   ( n  1)
                       i   1   2      n   
                   i 1                                  4
 Geometric Series: For real x  1,
              n                           n 1
                  k          2       n  x      1
                x 1  x  x    x 
            k 0                          x 1
    For |x| < 1,
                          
                              k   1
                             x 
                         k 0    1 x
        Review on Summations
 Linear-Geometric Series: For n  0, real c  1,
    n                                      n 1     n 2
        i         2          n (n  1)c  nc              c
       ic c  2c    nc                   2
   i 1                                (c  1)
 Harmonic Series: nth harmonic number, nI+,
                1 1      1
        H n 1     
                2 3      n
              n
                  1
             ln(n)  O (1)
             k 1 k
         Review on Summations
 Telescoping Series:
                n
               a
               k 1
                      k    ak  1 an  a0
 Differentiating Series: For |x| < 1,
                
                          k   x
                   kx           2
               k 0      1   x 
         Review on Summations
 Approximation by integrals:
   For monotonically increasing f(n)
          n            n        n 1
           f ( x)dx  f (k )  f ( x)dx
         m 1         k m       m
   For monotonically decreasing f(n)
         n1           n         n
          f ( x)dx  f (k )  f ( x)dx
         m           k m       m 1
 How?
       Review on Summations
 nth harmonic number
        n       n1
            1     dx
                  ln(n  1)
       k 1 k   1
                   x
        n       n
            1     dx
                  ln n
       k 2 k   1
                   x
            n
              1
         ln n  1
         k 1 k
          Reading Assignment
 Chapter 4 of CLRS.