Quicksort Slides

Quicksort Slides

CMPS 6610/4610 – Fall 2016 Quicksort Carola Wenk Slides courtesy of Charles Leiserson with additions by Carola Wenk CMPS 6610/4610 Algorithms 1 Quicksort • Proposed by C.A.R. Hoare in 1962. • Divide-and-conquer algorithm. • Sorts “in place” (like insertion sort, but not like merge sort). • Very practical (with tuning). • We are going to perform an expected runtime analysis on randomized quicksort CMPS 6610/4610 Algorithms 2 Quicksort: Divide and conquer Quicksort an n-element array: 1. Divide: Partition the array into two subarrays around a pivot x such that elements in lower subarray x elements in upper subarray. x x x 2. Conquer: Recursively sort the two subarrays. 3. Combine: Trivial. Key: Linear-time partitioning subroutine. CMPS 6610/4610 Algorithms 3 Partitioning subroutine PARTITION(A, p, q) A[p . q] x A[p] pivot = A[p] Running time i p = O(n) for n for j p + 1 to q elements. do if A[ j] x then i i + 1 exchange A[i] A[ j] exchange A[p] A[i] return i Invariant: x x x ? pij q CMPS 6610/4610 Algorithms 4 Example of partitioning 6 10 13 5 8 3 2 11 ij CMPS 6610/4610 Algorithms 5 Example of partitioning 6 10 13 5 8 3 2 11 ij CMPS 6610/4610 Algorithms 6 Example of partitioning 6 10 13 5 8 3 2 11 ij CMPS 6610/4610 Algorithms 7 Example of partitioning 6 10 13 5 8 3 2 11 6 5 13 10 8 3 2 11 ij CMPS 6610/4610 Algorithms 8 Example of partitioning 6 10 13 5 8 3 2 11 6 5 13 10 8 3 2 11 ij CMPS 6610/4610 Algorithms 9 Example of partitioning 6 10 13 5 8 3 2 11 6 5 13 10 8 3 2 11 ij CMPS 6610/4610 Algorithms 10 Example of partitioning 6 10 13 5 8 3 2 11 6 5 13 10 8 3 2 11 6 5 3 10 8 13 2 11 ij CMPS 6610/4610 Algorithms 11 Example of partitioning 6 10 13 5 8 3 2 11 6 5 13 10 8 3 2 11 6 5 3 10 8 13 2 11 ij CMPS 6610/4610 Algorithms 12 Example of partitioning 6 10 13 5 8 3 2 11 6 5 13 10 8 3 2 11 6 5 3 10 8 13 2 11 6 5 3 2 8 13 10 11 ij CMPS 6610/4610 Algorithms 13 Example of partitioning 6 10 13 5 8 3 2 11 6 5 13 10 8 3 2 11 6 5 3 10 8 13 2 11 6 5 3 2 8 13 10 11 ij CMPS 6610/4610 Algorithms 14 Example of partitioning 6 10 13 5 8 3 2 11 6 5 13 10 8 3 2 11 6 5 3 10 8 13 2 11 6 5 3 2 8 13 10 11 ij CMPS 6610/4610 Algorithms 15 Example of partitioning 6 10 13 5 8 3 2 11 6 5 13 10 8 3 2 11 6 5 3 10 8 13 2 11 6 5 3 2 8 13 10 11 2 5 3 6 8 13 10 11 i CMPS 6610/4610 Algorithms 16 Pseudocode for quicksort QUICKSORT(A, p, r) if p < r then q PARTITION(A, p, r) QUICKSORT(A, p, q–1) QUICKSORT(A, q+1, r) Initial call: QUICKSORT(A, 1, n) CMPS 6610/4610 Algorithms 17 Analysis of quicksort • Assume all input elements are distinct. • In practice, there are better partitioning algorithms for when duplicate input elements may exist. CMPS 6610/4610 Algorithms 18 Deterministic Algorithms Runtime for deterministic algorithms with input size n: • Worst-case runtime Attained by one input of size n • Best-case runtime Attained by one input of size n • Average runtime Averaged over all possible inputs of size n CMPS 6610/4610 Algorithms 19 Worst-case of quicksort • Let T(n) = worst-case running time on an array of n elements. • Input sorted or reverse sorted. • Partition around min or max element. • One side of partition always has no elements. CMPS 6610/4610 Algorithms 20 Worst-case recursion tree T(n) = T(0) + T(n–1) + cn CMPS 6610/4610 Algorithms 21 Worst-case recursion tree T(n) = T(0) + T(n–1) + cn T(n) CMPS 6610/4610 Algorithms 22 Worst-case recursion tree T(n) = T(0) + T(n–1) + cn cn T(0) T(n–1) CMPS 6610/4610 Algorithms 23 Worst-case recursion tree T(n) = T(0) + T(n–1) + cn cn T(0) c(n–1) T(0) T(n–2) CMPS 6610/4610 Algorithms 24 Worst-case recursion tree T(n) = T(0) + T(n–1) + cn cn T(0) c(n–1) T(0) c(n–2) T(0) (1) CMPS 6610/4610 Algorithms 25 Worst-case recursion tree T(n) = T(0) + T(n–1) + cn height cn 2 T(n) = k n (1) c(n–1) k1 (1) c(n–2) height = n (1) (1) CMPS 6610/4610 Algorithms 26 Worst-case recursion tree T(n) = T(0) + T(n–1) + cn n cn 2 T(n) = k n (1) c(n–1) k1 (arithmetic series) (1) c(n–2) height = n (1) (1) CMPS 6610/4610 Algorithms 27 Worst-case recursion tree T(n) = T(0) + T(n–1) + cn n cn 2 T(n) = k n (1) c(n–1) k1 (arithmetic series) (1) c(n–2) height = n (1) (1) CMPS 6610/4610 Algorithms 28 Deterministic Algorithms Runtime for deterministic algorithms with input size n: • Worst-case runtime: ଶ Attained by input: [1,2,3,…,n] or [n, n-1,…,2,1] • Best-case runtime Attained by one input of size n • Average runtime Averaged over all possible inputs of size n CMPS 6610/4610 Algorithms 29 Best-case analysis (For intuition only!) If we’re lucky, PARTITION splits the array evenly: T(n)= 2T(n/2) + (n) = (n log n) (same as merge sort) 1 : 9 What if the split is always 10 10 ? 1 9 T (n) T 10 n T 10 n (n) What is the solution to this recurrence? CMPS 6610/4610 Algorithms 30 Analysis of “almost-best” case T (n) CMPS 6610/4610 Algorithms 31 Analysis of “almost-best” case cn T 1 n 9 10 T 10 n CMPS 6610/4610 Algorithms 32 Analysis of “almost-best” case cn 1 cn 9 10 10 cn 1 9 9 81 T 100 nT 100 n T 100 nT 100 n CMPS 6610/4610 Algorithms 33 Analysis of “almost-best” case cn cn 1 cn 9 10 10 cn cn log10/9n 1 9 9 81 100 cn 100 cn 100 cn 100 cn cn (1) O(n) leaves … (1) CMPS 6610/4610 Algorithms 34 Analysis of “almost-best” case cn cn 1 cn 9 cn cn log 10 10 10 log10/9n n 1 9 9 81 100 cn 100 cn 100 cn 100 cn cn (1) O(n) leaves … (1) (n log n) cn log10n T(n) cn log10/9n + (n) CMPS 6610/4610 Algorithms 35 Deterministic Algorithms Runtime for deterministic algorithms with input size n: • Worst-case runtime: ଶ Attained by input: [1,2,3,…,n] or [n, n-1,…,2,1] • Best-case runtime: Attained by input of size n that splits evenly or 1 : 9 at every recursive level 10 10 • Average runtime Averaged over all possible inputs of size n CMPS 6610/4610 Algorithms 36 Average Runtime • What kind of inputs are there? • Do [1,2,…,n] and [5,6,…,n+5] cause different behavior of Quicksort? • No. Therefore it suffices to only consider all permutations of [1,2,…,n] . • How many inputs are there? • There are n! different permutations of [1,2,…,n] Average over all n! input permutations. CMPS 6610/4610 Algorithms 37 Average Runtime: Quicksort • The average runtime averages runtimes over all n! different input permutations • One can show that the average runtime for Quicksort is • Disadvantage of considering average runtime: • There are still worst-case inputs that will have the worst-case runtime of O(n2) • Are all inputs really equally likely? That depends on the application Better: Use a randomized algorithm CMPS 6610/4610 Algorithms 38 Randomized quicksort IDEA: Partition around a random element. • Running time is independent of the input order. It depends on a probabilistic experiment (sequence s of numbers obtained from random number generator) Runtime is a random variable (maps sequence of random numbers to runtimes) • Expected runtime = expected value of runtime random variable • No assumptions need to be made about the input distribution. • No specific input elicits the worst-case behavior. • The worst case is determined only by the sequence s of random numbers. CMPS 6610/4610 Algorithms 39 Quicksort Runtimes • Best case runtime Tbest(n) O(n log n) 2 • Worst case runtime Tworst(n) O(n ) • Average runtime Tavg(n) O(n log n ) • Better even, the expected runtime of randomized quicksort is O(n log n) CMPS 6610/4610 Algorithms 40 Average Runtime vs. Expected Runtime • Average runtime is averaged over all inputs of a deterministic algorithm. • Expected runtime is the expected value of the runtime random variable of a randomized algorithm. It effectively “averages” over all sequences of random numbers. • De facto both analyses are very similar. However in practice the randomized algorithm ensures that not one single input elicits worst case behavior. CMPS 6610/4610 Algorithms 41 Quicksort in practice • Quicksort is a great general-purpose sorting algorithm.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    42 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us