Analysis of Algorithms


Which growth rate is best?


Download 1.1 Mb.
bet3/3
Sana06.10.2023
Hajmi1.1 Mb.
#1693201
1   2   3
Bog'liq
pdf-1

Which growth rate is best?

  • T(n) = 1000n + n2 or T(n) = 2n + n3

Growth Rates

  • Analysis of Algorithms
  • Growth rates of functions:
    • Linear  n
    • Quadratic  n2
    • Cubic  n3
  • In a log-log chart, the slope of the line corresponds to the growth rate of the function

Functions Graphed Using “Normal” Scale

  • Analysis of Algorithms
  • g(n) = 2n
  • g(n) = 1
  • g(n) = lg n
  • g(n) = n lg n
  • g(n) = n
  • g(n) = n2
  • g(n) = n3

Constant Factors

  • Analysis of Algorithms
  • The growth rate is not affected by
    • constant factors or
    • lower-order terms
  • Examples

Big-Oh Notation

  • Analysis of Algorithms
  • Given functions f(n) and g(n), we say that f(n) is O(g(n)) if there are positive constants c and n0 such that
  • f(n)  cg(n) for n n0
  • Example: 2n  10 is O(n)
    • 2n  10 cn
    • (c  2) n 10
    • n 10(c  2)
    • Pick c 3 and n0 10

f(n) is O(g(n)) iff f(n)  cg(n) for n n0

  • Analysis of Algorithms

Big-Oh Notation (cont.)

  • Analysis of Algorithms
  • Example: the function n2 is not O(n)
    • n2 cn
    • n c
    • The above inequality cannot be satisfied since c must be a constant
  • Analysis of Algorithms
  • More Big-Oh Examples
  • 7n-2
    • 7n-2 is O(n)
    • need c > 0 and n0  1 such that 7n-2  c•n for n  n0
    • this is true for c = 7 and n0 = 1
  • 3n3 + 20n2 + 5
    • 3n3 + 20n2 + 5 is O(n3)
    • need c > 0 and n0  1 such that 3n3 + 20n2 + 5  c•n3 for n  n0
    • this is true for c = 4 and n0 = 21
  • 3 log n + 5
    • 3 log n + 5 is O(log n)
    • need c > 0 and n0  1 such that 3 log n + 5  c•log n for n  n0
    • this is true for c = 8 and n0 = 2

Big-Oh and Growth Rate

  • Analysis of Algorithms
  • The big-Oh notation gives an upper bound on the growth rate of a function
  • The statement “f(n) is O(g(n))” means that the growth rate of f(n) is no more than the growth rate of g(n)
  • We can use the big-Oh notation to rank functions according to their growth rate

Questions

  • Analysis of Algorithms
  • Is T(n) = 9n4 + 876n = O(n4)?
  • Is T(n) = 9n4 + 876n = O(n3)?
  • Is T(n) = 9n4 + 876n = O(n27)?
  • T(n) = n2 + 100n = O(?)
  • T(n) = 3n + 32n3 + 767249999n2 = O(?)

Big-Oh Rules (shortcuts)

  • Analysis of Algorithms
  • If is f(n) a polynomial of degree d, then f(n) is O(nd), i.e.,
    • Drop lower-order terms
    • Drop constant factors
  • Use the smallest possible class of functions
    • Say “2n is O(n)” instead of “2n is O(n2)”
  • Use the simplest expression of the class
    • Say “3n  5 is O(n)” instead of “3n  5 is O(3n)”

Rank From Fast to Slow…

  • Analysis of Algorithms
  • T(n) = O(n4)
  • T(n) = O(n log n)
  • T(n) = O(n2)
  • T(n) = O(n2 log n)
  • T(n) = O(n)
  • T(n) = O(2n)
  • T(n) = O(log n)
  • T(n) = O(n + 2n)
  • Note: Assume base of
  • log is 2 unless
  • otherwise instructed
  • i.e. log n = log2 n

Computing Prefix Averages

  • Analysis of Algorithms
  • We further illustrate asymptotic analysis with two algorithms for prefix averages
  • The i-th prefix average of an array X is average of the first (i  1) elements of X
  • A[i] X[0]  X[1]  …  X[i]
  • Computing the array A of prefix averages of another array X has applications to financial analysis
  • Analysis of Algorithms
  • Prefix Averages (Quadratic)
  • The following algorithm computes prefix averages in quadratic time by applying the definition
  • Algorithm prefixAverages1(X, n)
  • Input array X of n integers
  • Output array A of prefix averages of X #operations
  • Anew array of n integers n
  • for i  0 to n  1 do n
  • sX[0] n
  • for j  1 to i do 1 2 … (n  1)
  • ssX[j] 1 2 … (n  1)
  • A[i]  s  (i  1) n
  • return A 1

Arithmetic Progression

  • Analysis of Algorithms
  • The running time of prefixAverages1 is O(1 2 …n)
  • The sum of the first n integers is n(n 1) 2
    • There is a simple visual proof of this fact
  • Thus, algorithm prefixAverages1 runs in O(n2) time
  • Analysis of Algorithms
  • Prefix Averages (Linear)
  • The following algorithm computes prefix averages in linear time by keeping a running sum
  • Algorithm prefixAverages2(X, n)
  • Input array X of n integers
  • Output array A of prefix averages of X #operations
  • A  new array of n integers n
  • s  0 1
  • for i  0 to n  1 do n
  • ssX[i] n
  • A[i]  s  (i  1) n
  • return A 1
  • Algorithm prefixAverages2 runs in O(n) time

Math you may need to Review

  • Analysis of Algorithms
  • properties of logarithms:
    • logb(xy) = logbx + logby
    • logb (x/y) = logbx - logby
    • logbxa = alogbx
    • logba = logxa/logxb
  • properties of exponentials:
    • a(b+c) = aba c
    • abc = (ab)c
    • ab /ac = a(b-c)
    • b = a logab
    • bc = a c*logab
  • Summations
  • Logarithms and Exponents
  • Proof techniques
  • Basic probability
  • Analysis of Algorithms
  • Big-Omega 
  • Definition: f(n) is (g(n)) if there is a constant c > 0 and an integer constant n0  1 such that f(n)  c•g(n) for n  n0
  • An asymptotic lower Bound
  • Analysis of Algorithms
  • Big-Theta 
  • Definition: f(n) is (g(n)) if there are constants c’ > 0 and c’’ > 0 and an integer constant n0  1 such that c’•g(n)  f(n)  c’’•g(n) for n  n0
  • Here we say that g(n) is an asymptotically tight bound for f(n).

Big-Theta  (cont)

  • Based on the definitions, we have the following theorem:
    • f(n) = Θ(g(n)) if and only if f(n) = O(g(n)) and f(n) = Ω(g(n)).
  • For example, the statement n2/2 + lg n = Θ(n2) is equivalent to n2/2 + lg n = O(n2) and n2/2 + lg n = Ω(n2).
  • Note that asymptotic notation applies to asymptotically positive functions only, which are functions whose values are positive for all sufficiently large n.
  • Analysis of Algorithms

Prove n2/2 + lg n = Θ(n2).

  • Proof. To prove this claim, we must determine positive constants c1, c2 and n0, s.t. c1 n2<= n2/2 + lg n <= c2 n2
    • c1 <= ½ + (lg n) / n2 <= c2 (divide thru by n2)
    • Pick c1 = ¼ , c2 = ¾ and n0 = 2
    • For n0 = 2, 1/4 <= ½ + (lg 2) / 4 <= ¾, TRUE
    • When n0 > 2, the (½ + (lg 2) / 4) term grows smaller but never less than ½, therefore n2/2 + lg n = Θ(n2).
  • Analysis of Algorithms

Intuition for Asymptotic Notation

  • Analysis of Algorithms
  • Big-Oh
    • f(n) is O(g(n)) if f(n) is asymptotically less than or equal to g(n)
  • big-Omega
    • f(n) is (g(n)) if f(n) is asymptotically greater than or equal to g(n)
  • big-Theta
    • f(n) is (g(n)) if f(n) is asymptotically equal to g(n)

Download 1.1 Mb.

Do'stlaringiz bilan baham:
1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling