1 / 11

Asymptotes: Why?

Asymptotes: Why?. How to describe an algorithm’s running time? (or space, …). How does the running time depend on the input? T(x) = running time for instance x. Problem: Impractical to use, e.g., “15 steps to sort [3 9 1 7], 13 steps to sort [1 2 0 3 9], …”

mills
Download Presentation

Asymptotes: Why?

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. Asymptotes: Why? How to describe an algorithm’s running time? (or space, …) How does the running time depend on the input? T(x) = running time for instance x Problem: Impractical to use, e.g., “15 steps to sort [3 9 1 7], 13 steps to sort [1 2 0 3 9], …” Need to abstract away from the individual instances.

  2. Asymptotes: Why? Standard solution: Abstract based on size of input. How does the running time depend on the input? T(n) = running time for instances of size n Problem: Time also depends on other factors. E.g., on sortedness of array.

  3. Asymptotes: Why? Most common. Default. Determining the input probability distribution can be difficult. Solution: Provide a bound over these instances. Worst case T(n) = max{T(x) | x is an instance of size n} Best case T(n) = min{T(x) | x is an instance of size n} Average case T(n) = |x|=n Pr{x}  T(x)

  4. Asymptotes: Why? What’s confusing about this notation? Worst case T(n) = max{T(x) | x is an instance of size n} Best case T(n) = min{T(x) | x is an instance of size n} Average case T(n) = |x|=n Pr{x}  T(x) Two different kinds of functions: T(instance) T(size of instance) Won’t use T(instance) notation again, so can ignore.

  5. Asymptotes: Why? Problem: T(n) = 3n2 + 14n + 27 Too much detail: constants may reflect implementation details & lower terms are insignificant. Solution: Ignore the constants & low-order terms.(Omitted details still important pragmatically.) 3n2 > 14n+17  “large enough” n

  6. Upper Bounds Creating an algorithm proves we can solve the problem within a given bound. But another algorithm might be faster. E.g., sorting an array. Insertion sort  O(n2) What are example algorithms for O(1), O(log n), O(n), O(n log n), O(n2), O(n3), O(2n)?

  7. Lower Bounds Sometimes can prove that we cannot compute something without a sufficient amount of time. That doesn't necessarily mean we know how to compute it in this lower bound. E.g., sorting an array. # comparisons needed in worst case  (n log n) Shown in COMP 482.

  8. Definitions: O,  T(n)  O(g(n))   constants C,k > 0 such that  nk, T(n)  Cg(n) T(n) (g’(n))   constants C’,k’ > 0 such that  nk’, T(n)  C’g’(n) Cg(n) T(n) C’g’(n) k k’

  9. Examples: O,  2n+13  O( ? ) Also, O(n2), O(5n), … Can always weaken the bound. O(n) 2n+13  ( ? ) (n), also (log n), (1), … 2n O(n) ? (n) ? Given a C, 2n  Cn, for all but small n. (n), not O(n). nlog n O(n5) ? No. Given a C, log n  C5, for all large enough n. Thus, (n5).

  10. Definitions:  T(n)  (g(n))  T(n)  O(g(n)) and T(n)  (g(n)) Ideally, find algorithms that are asymptotically as good as possible.

  11. Notation O(), (), () are sets of functions. But common to abuse notation, writing T(n) = O(…) instead of T(n)  O(…) as well as T(n) = f(n) + O(…)

More Related