1 / 47

Discrete Structures & Algorithms Functions & Asymptotic Complexity

Discrete Structures & Algorithms Functions & Asymptotic Complexity. To understand how to perform computations efficiently, we need to know How to count! How to sum a sequence of steps. Reason about the complexity/efficiency of an algorithm. Prove the correctness of our analysis. Logic

saki
Download Presentation

Discrete Structures & Algorithms Functions & Asymptotic Complexity

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Discrete Structures & AlgorithmsFunctions & Asymptotic Complexity

  2. To understand how to perform computations efficiently, we need to know • How to count! • How to sum a sequence of steps. • Reason about the complexity/efficiency of an algorithm. • Prove the correctness of our analysis. • Logic • Methods of inference • Proof strategies • Induction • … • (and eventually) How to create better algorithms.

  3. Functions • We can represent the number of steps needed to achieve a goal as a function of the size of the problem. • Next: A quick refresher on functions • You should know (most of this) from other math/engineering courses.

  4. Functions Definition: A function f : A  B is a subset of AxB where  a  A, b  B unique and <a,b>  f. (A function is a mapping of elements from one set to another.)

  5. B A A point! Functions Definition: a function f : A  B is a subset of AxB where  a  A, b  B unique and <a,b>  f. B A

  6. Michael Tito Janet Cindy Bobby Katherine Carol Mother Teresa Functions A = {Michael, Tito, Janet, Cindy, Bobby} B = {Katherine Evans, Carol Brady, Mother Teresa} Let f: A  B be defined as f(a) = mother(a).

  7. Michael Tito Janet Cindy Bobby Katherine Evans Carol Brady Mother Teresa image(S) = f(S) Image and preimage For any set S  A, image(S) = {b : a  S, f(a) = b} So, image({Michael, Tito}) = {Katherine Evans} image(A) = B - {Mother Teresa}

  8. Michael Tito Janet Cindy Bobby Katherine Evans Carol Brady Mother Teresa preimage(S) = f-1(S) Image and preimage For any S  B, preimage(S) = {a: b  S, f(a) = b} So, preimage({Carol Brady}) = {Cindy, Bobby} preimage(B) = A

  9. Michael Tito Janet Cindy Bobby Katherine Evans Carol Brady Mother Teresa  S Image and preimage What is image(preimage(S))? • S • { } • subset of S • superset of S • who knows?

  10. Functions and their properties • You should be familiar with these properties (past classes) or • Functions derive many of their properties from sets (they are defined on sets) • As you already know much about sets -> should be able to derive these properties

  11. Functions and their properties f(A  B)  f(A)  f(B)? Choose an arbitrary b  f(A  B), and show that it must also be an element of f(A)  f(B). f(A  B) = {y : x  (A  B), f(x) = y} So, x  (A  B) such that f(x) = y. If x  A (it is), then f(x) = y  f(A). If x  B (it is), then f(x) = y  f(B). y  f(A), and y  f(B), so b  f(A)  f(B).

  12. Michael Tito Janet Cindy Bobby Katherine Evans Carol Brady Mother Teresa Not one-to-one Every b  B has at most 1 preimage. Injections A function f: A  B is one-to-one (injective, an injection) if a,b,c, (f(a) = b  f(c) = b)  a = c

  13. Michael Tito Janet Cindy Bobby Katherine Evans Carol Brady Mother Teresa Not surjective Every b  B has at least 1 preimage. Surjections A function f: A  B is surjective if b  B, a  A f(a) = b

  14. Isaak Bri Lynette Aidan Evan Isaak Bri Lynette Aidan Evan Cinda Dee Deb Katrina Dawn Cinda Dee Deb Katrina Dawn Every b  B has exactly 1 preimage. An important implication of this characteristic: The preimage (f-1) is a function! Bijections A function f: A  B is bijective if it is both one-to-one (injective) and surjective.

  15. yes yes yes Examples Suppose f: R+  R+, f(x) = x2. Is f one-to-one? Is f surjective? Is f bijective?

  16. no yes no Examples Suppose f: R  R+, f(x) = x2. Is f one-to-one? Is f surjective? Is f bijective?

  17. no no no Examples Suppose f: R  R, f(x) = x2. Is f one-to-one? Is f surjective? Is f bijective?

  18. Composition of functions Let g:XY, and f:YZ be functions. Then the composition of f and g is: (f o g)(x) = f(g(x)) g f

  19. Asymptotic complexity

  20. Asymptotic complexity • Goal: Estimate properties (e.g., running time) of an algorithm as a function of input size nfor large n. • Expressed using only the highest-order term in the expression for the exact running time. • Instead of exact running time, say Q(n2). • Describes behavior of function in the limit.

  21. Asymptotic notation • Q, O, W, o, w • Defined for functions over the natural numbers. • Example: f(n) Q(n2). • Describes how f(n) grows in comparison to n2. • Q(n2) define a set of functions; in practice used to compare two function sizes. • The notations describes the rate-of-growth for a set of functions.

  22. -notation (big-Theta) For function g(n), we define (g(n)), big-Theta of n, as the set: (g(n)) = {f(n) :  positive constants c1, c2, n0, such that n  n0, we have c1g(n)  f(n)  c2g(n) } Intuitively: Set of all functions thathave the same rate of growth as g(n). g(n) is an asymptotically tight bound for f(n).

  23. -notation For function g(n), we define (g(n)), big-Theta of n, as the set: (g(n)) = {f(n) :  positive constants c1, c2, n0, such that n  n0, we have c1g(n)  f(n)  c2g(n) } Technically, f(n)  (g(n)). Older usage, f(n) = (g(n)). I’ll accept either… g(n) is an asymptotically tight bound for f(n).

  24. -notation For function g(n), we define (g(n)), big-Theta of n, as the set: (g(n)) = {f(n) :  positive constants c1, c2, n0, such that n  n0, we have c1g(n)  f(n)  c2g(n) } If f(n)  (g(n)) Then ? (0, ∞, or a constant )

  25. Example (g(n)) = {f(n) :  positive constants c1, c2, and n0, such that n  n0, c1g(n)  f(n)  c2g(n)} For f(n) = 10n2 - 3n Q(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 Q(n2)

  26. Example (g(n)) ={f(n) : positive constants c1, c2, and n0, such that n  n0, c1g(n)  f(n)  c2g(n)} • Does n5 Q(n4)? • Does 300n3 Q(n4)? • How about 22n Q(2n)? • Does lg(n!) (n lg n)? • Proof using Stirling’s approximation (in the text) for lg(n!).

  27. O-notation f(n) = (g(n))  f(n) = O(g(n)). (g(n))  O(g(n)). 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 f whose rate of growth is the same as or lower than that of g(n). O(g(n)) is an asymptotic upper bound for f(n).

  28. Examples O(g(n)) = {f(n) :  positive constants c and n0, such that n  n0, we have 0  f(n)  cg(n) } • Any linear functionan + b is in O(n2). How? • Show that 3n3  O(n4) for appropriate c and n0.

  29.  -notation (omega) f(n) = (g(n))  f(n) = (g(n)). (g(n))  (g(n)). 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).

  30. 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.

  31. Relations between Q, O, W

  32. Relations between Q, W, 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)). • (g(n)) = O(g(n)) W(g(n)) • In practice, asymptotically tight bounds are obtained from asymptotic upper and lower bounds.

  33. Example • Insertion sort takes Q(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 W(n). • In fact, using (e.g.) merge sort, sorting is Q(n lg n) in the worst case. • No comparison sort to do better in the worst case. [We may not see a proof of this result in this course.]

  34. 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 do we interpret this? • In equations, (f(n)) always stands for an anonymous functiong(n) =(f(n)) • In the example above, (n2) stands for 3n2 + 2n + 1.

  35. o-notation For a given function g(n), the set little-o: f(n) becomes insignificant relative to g(n)as napproaches infinity: lim [f(n) / g(n)] = 0. n g(n) is anupper bound for f(n)that is not asymptotically tight. Observe the difference in this definition from previous ones. Why? o(g(n)) = {f(n): c > 0, n0 > 0 such that  n n0, we have0  f(n) < cg(n)}.

  36. w–notation (little-omega) For a given function g(n), the set little-omega: f(n) becomes arbitrarily large relative to g(n)as n approaches infinity: lim [f(n) / g(n)] = . n g(n) is alower bound for f(n)that is not asymptotically tight. w(g(n)) = {f(n): c > 0, n0 > 0 such that  n n0, we have0  cg(n) < f(n)}.

  37. Limits • lim [f(n) / g(n)] = 0 Þ f(n) o(g(n)) n • lim [f(n) / g(n)] <  Þ f(n) O(g(n)) n • 0 < lim [f(n) / g(n)] <  Þ f(n) Q(g(n)) n • 0 < lim [f(n) / g(n)]Þ f(n)  W(g(n)) n • lim [f(n) / g(n)] =  Þ f(n) w(g(n)) n • lim [f(n) / g(n)] undefinedÞ can not say n

  38. Relationships • Subset relations between order-of-growth sets. RR ( f ) O( f ) • f o( f ) ( f ) ( f )

  39. 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) = w(g(n)) & g(n) = w(h(n))  f(n) = w(h(n)) • Reflexivity • f(n) = (f(n)) • f(n) = O(f(n)) • f(n) = (f(n))

  40. 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) = w((f(n))

  41. Common functions

  42. Exponentials • Useful (and elementary) Identities: • Exponentials and polynomials

  43. x = logba is the exponent for a = bx. Natural log: ln a = logea Binary log: lg a = log2a lg2a = (lg a)2 lglg a =lg(lg a) Logarithms

  44. 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. • Example: log2n = log10n * log210 • Base of logarithm is not an issue in asymptotic notation. • Exponentials with different bases differ by a exponential factor (not a constant factor). • Example:2n= (2/3)n *3n.

  45. 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) nlg43lg n A (B) alog b =blog a; B =3lg n=nlg 3; A/B =nlg(4/3)  as n lg2nn1/2 A o (B) lim( lgan / nb ) = 0 (here a = 2 and b = 1/2)  A o (B) n

  46. Wrap-up • What are the different asymptotic bounds on functions? • How are the asymptotic bounds related? • Asymptotic bounds and algorithmic efficiency

  47. Procedure mergesort (L=a1, a2, ….an) if n>1 then m:= n/2 L1 = a1, a2, …. am L2 = am+1, …. an L = merge (mergesort(L1), mergesort (L2)) Recursive proof • Correctness • Complexity

More Related