CS 332: Algorithms Quicksort David Luebke 1 4/9/2019.

Slides:



Advertisements
Similar presentations
David Luebke 1 4/22/2015 CS 332: Algorithms Quicksort.
Advertisements

Algorithms Analysis Lecture 6 Quicksort. Quick Sort Divide and Conquer.
CS Section 600 CS Section 002 Dr. Angela Guercio Spring 2010.
Analysis of Algorithms CS 477/677 Instructor: Monica Nicolescu Lecture 6.
Analysis of Algorithms CS 477/677 Sorting – Part B Instructor: George Bebis (Chapter 7)
Spring 2015 Lecture 5: QuickSort & Selection
David Luebke 1 5/20/2015 CS 332: Algorithms Quicksort.
Quicksort Ack: Several slides from Prof. Jim Anderson’s COMP 750 notes. UNC Chapel Hill1.
Introduction to Algorithms Chapter 7: Quick Sort.
Quicksort Many of the slides are from Prof. Plaisted’s resources at University of North Carolina at Chapel Hill.
CS 253: Algorithms Chapter 7 Mergesort Quicksort Credit: Dr. George Bebis.
Ch. 7 - QuickSort Quick but not Guaranteed. Ch.7 - QuickSort Another Divide-and-Conquer sorting algorithm… As it turns out, MERGESORT and HEAPSORT, although.
Analysis of Algorithms CS 477/677 Instructor: Monica Nicolescu.
Analysis of Algorithms CS 477/677 Instructor: Monica Nicolescu.
Quicksort CIS 606 Spring Quicksort Worst-case running time: Θ(n 2 ). Expected running time: Θ(n lg n). Constants hidden in Θ(n lg n) are small.
1 QuickSort Worst time:  (n 2 ) Expected time:  (nlgn) – Constants in the expected time are small Sorts in place.
Computer Algorithms Lecture 10 Quicksort Ch. 7 Some of these slides are courtesy of D. Plaisted et al, UNC and M. Nicolescu, UNR.
10 Algorithms in 20th Century Science, Vol. 287, No. 5454, p. 799, February 2000 Computing in Science & Engineering, January/February : The Metropolis.
MS 101: Algorithms Instructor Neelima Gupta
Chapter 7 Quicksort Ack: This presentation is based on the lecture slides from Hsu, Lih- Hsing, as well as various materials from the web.
10/13/20151 CS 3343: Analysis of Algorithms Lecture 9: Review for midterm 1 Analysis of quick sort.
Introduction to Algorithms Jiafen Liu Sept
David Luebke 1 6/3/2016 CS 332: Algorithms Analyzing Quicksort: Average Case.
David Luebke 1 6/3/2016 CS 332: Algorithms Heapsort Priority Queues Quicksort.
CS 361 – Chapters 8-9 Sorting algorithms –Selection, insertion, bubble, “swap” –Merge, quick, stooge –Counting, bucket, radix How to select the n-th largest/smallest.
CS 2133: Data Structures Quicksort. Review: Heaps l A heap is a “complete” binary tree, usually represented as an array:
QuickSort (Ch. 7) Like Merge-Sort, based on the three-step process of divide- and-conquer. Input: An array A[1…n] of comparable elements, the starting.
COSC 3101A - Design and Analysis of Algorithms 4 Quicksort Medians and Order Statistics Many of these slides are taken from Monica Nicolescu, Univ. of.
David Luebke 1 2/19/2016 Priority Queues Quicksort.
Mudasser Naseer 1 3/4/2016 CSC 201: Design and Analysis of Algorithms Lecture # 6 Bubblesort Quicksort.
David Luebke 1 6/26/2016 CS 332: Algorithms Linear-Time Sorting Continued Medians and Order Statistics.
David Luebke 1 7/2/2016 CS 332: Algorithms Linear-Time Sorting: Review + Bucket Sort Medians and Order Statistics.
Algorithm Design Techniques, Greedy Method – Knapsack Problem, Job Sequencing, Divide and Conquer Method – Quick Sort, Finding Maximum and Minimum, Dynamic.
Analysis of Algorithms CS 477/677
CS 3343: Analysis of Algorithms
Order Statistics.
Quick Sort Divide: Partition the array into two sub-arrays
Order Statistics Comp 122, Spring 2004.
Introduction to Algorithms Prof. Charles E. Leiserson
Linear-Time Sorting Continued Medians and Order Statistics
Randomized Algorithms
Algorithms CSCI 235, Fall 2017 Lecture 16 Quick Sort Read Ch. 7
QuickSort QuickSort Best, Worst Average Cases K-th Ordered Statistic
CSC 413/513: Intro to Algorithms
Order Statistics(Selection Problem)
CO 303 Algorithm Analysis And Design Quicksort
Ch 7: Quicksort Ming-Te Chi
Randomized Algorithms
Algorithms and Data Structures Lecture III
Lecture 3 / 4 Algorithm Analysis
Lecture No 6 Advance Analysis of Institute of Southern Punjab Multan
CS 3343: Analysis of Algorithms
Order Statistics Comp 550, Spring 2015.
CS 583 Analysis of Algorithms
CS 3343: Analysis of Algorithms
Sorting.
Ack: Several slides from Prof. Jim Anderson’s COMP 202 notes.
Chapter 7 Quicksort.
Algorithms CSCI 235, Spring 2019 Lecture 16 Quick Sort Read Ch. 7
Order Statistics Comp 122, Spring 2004.
CS200: Algorithm Analysis
The Selection Problem.
Quicksort and Randomized Algs
Design and Analysis of Algorithms
Quicksort Quick sort Correctness of partition - loop invariant
Algorithms CSCI 235, Spring 2019 Lecture 17 Quick Sort II
CS200: Algorithm Analysis
Divide and Conquer Merge sort and quick sort Binary search
Algorithms and Data Structures Lecture III
Presentation transcript:

CS 332: Algorithms Quicksort David Luebke 1 4/9/2019

Homework 2 Assigned today, due next Wednesday Will be on web page shortly after class Go over now David Luebke 2 4/9/2019

Review: Quicksort Sorts in place Sorts O(n lg n) in the average case Sorts O(n2) in the worst case But in practice, it’s quick And the worst case doesn’t happen often (but more on this later…) David Luebke 3 4/9/2019

Quicksort Another divide-and-conquer algorithm The array A[p..r] is partitioned into two non-empty subarrays A[p..q] and A[q+1..r] Invariant: All elements in A[p..q] are less than all elements in A[q+1..r] The subarrays are recursively sorted by calls to quicksort Unlike merge sort, no combining step: two subarrays form an already-sorted array David Luebke 4 4/9/2019

Quicksort Code Quicksort(A, p, r) { if (p < r) q = Partition(A, p, r); Quicksort(A, p, q); Quicksort(A, q+1, r); } David Luebke 5 4/9/2019

Partition Clearly, all the action takes place in the partition() function Rearranges the subarray in place End result: Two subarrays All values in first subarray  all values in second Returns the index of the “pivot” element separating the two subarrays How do you suppose we implement this? David Luebke 6 4/9/2019

Partition In Words Partition(A, p, r): Select an element to act as the “pivot” (which?) Grow two regions, A[p..i] and A[j..r] All elements in A[p..i] <= pivot All elements in A[j..r] >= pivot Increment i until A[i] >= pivot Decrement j until A[j] <= pivot Swap A[i] and A[j] Repeat until i >= j Return j Note: slightly different from book’s partition() David Luebke 7 4/9/2019

What is the running time of partition()? Partition Code Partition(A, p, r) x = A[p]; i = p - 1; j = r + 1; while (TRUE) repeat j--; until A[j] <= x; i++; until A[i] >= x; if (i < j) Swap(A, i, j); else return j; Illustrate on A = {5, 3, 2, 6, 4, 1, 3, 7}; What is the running time of partition()? David Luebke 8 4/9/2019

partition() runs in O(n) time Partition Code Partition(A, p, r) x = A[p]; i = p - 1; j = r + 1; while (TRUE) repeat j--; until A[j] <= x; i++; until A[i] >= x; if (i < j) Swap(A, i, j); else return j; partition() runs in O(n) time David Luebke 9 4/9/2019

Analyzing Quicksort What will be the worst case for the algorithm? Partition is always unbalanced What will be the best case for the algorithm? Partition is perfectly balanced Which is more likely? The latter, by far, except... Will any particular input elicit the worst case? Yes: Already-sorted input David Luebke 10 4/9/2019

Analyzing Quicksort In the worst case: Works out to T(n) = (n2) T(n) = T(n - 1) + (n) Works out to T(n) = (n2) David Luebke 11 4/9/2019

Analyzing Quicksort In the best case: What does this work out to? T(n) = 2T(n/2) + (n) What does this work out to? T(n) = (n lg n) David Luebke 12 4/9/2019

Improving Quicksort The real liability of quicksort is that it runs in O(n2) on already-sorted input Book discusses two solutions: Randomize the input array, OR Pick a random pivot element How will these solve the problem? By insuring that no particular input can be chosen to make quicksort run in O(n2) time David Luebke 13 4/9/2019

Analyzing Quicksort: Average Case Assuming random input, average-case running time is much closer to O(n lg n) than O(n2) First, a more intuitive explanation/example: Suppose that partition() always produces a 9-to-1 split. This looks quite unbalanced! The recurrence is thus: T(n) = T(9n/10) + T(n/10) + n How deep will the recursion go? (draw it) Use n instead of O(n) for convenience (how?) David Luebke 14 4/9/2019

Analyzing Quicksort: Average Case Intuitively, a real-life run of quicksort will produce a mix of “bad” and “good” splits Randomly distributed among the recursion tree Pretend for intuition that they alternate between best-case (n/2 : n/2) and worst-case (n-1 : 1) What happens if we bad-split root node, then good-split the resulting size (n-1) node? David Luebke 15 4/9/2019

Analyzing Quicksort: Average Case Intuitively, a real-life run of quicksort will produce a mix of “bad” and “good” splits Randomly distributed among the recursion tree Pretend for intuition that they alternate between best-case (n/2 : n/2) and worst-case (n-1 : 1) What happens if we bad-split root node, then good-split the resulting size (n-1) node? We fail English David Luebke 16 4/9/2019

Analyzing Quicksort: Average Case Intuitively, a real-life run of quicksort will produce a mix of “bad” and “good” splits Randomly distributed among the recursion tree Pretend for intuition that they alternate between best-case (n/2 : n/2) and worst-case (n-1 : 1) What happens if we bad-split root node, then good-split the resulting size (n-1) node? We end up with three subarrays, size 1, (n-1)/2, (n-1)/2 Combined cost of splits = n + n -1 = 2n -1 = O(n) No worse than if we had good-split the root node! David Luebke 17 4/9/2019

Analyzing Quicksort: Average Case Intuitively, the O(n) cost of a bad split (or 2 or 3 bad splits) can be absorbed into the O(n) cost of each good split Thus running time of alternating bad and good splits is still O(n lg n), with slightly higher constants How can we be more rigorous? David Luebke 18 4/9/2019

Analyzing Quicksort: Average Case For simplicity, assume: All inputs distinct (no repeats) Slightly different partition() procedure partition around a random element, which is not included in subarrays all splits (0:n-1, 1:n-2, 2:n-3, … , n-1:0) equally likely What is the probability of a particular split happening? Answer: 1/n David Luebke 19 4/9/2019

Analyzing Quicksort: Average Case So partition generates splits (0:n-1, 1:n-2, 2:n-3, … , n-2:1, n-1:0) each with probability 1/n If T(n) is the expected running time, What is each term under the summation for? What is the (n) term for? David Luebke 20 4/9/2019

Analyzing Quicksort: Average Case Note: this is just like the book’s recurrence (p166), except that the summation starts with k=0 We’ll take care of that in a second Write it on the board David Luebke 21 4/9/2019

Analyzing Quicksort: Average Case We can solve this recurrence using the dreaded substitution method Guess the answer Assume that the inductive hypothesis holds Substitute it in for some value < n Prove that it follows for n David Luebke 22 4/9/2019

Analyzing Quicksort: Average Case We can solve this recurrence using the dreaded substitution method Guess the answer What’s the answer? Assume that the inductive hypothesis holds Substitute it in for some value < n Prove that it follows for n David Luebke 23 4/9/2019

Analyzing Quicksort: Average Case We can solve this recurrence using the dreaded substitution method Guess the answer T(n) = O(n lg n) Assume that the inductive hypothesis holds Substitute it in for some value < n Prove that it follows for n David Luebke 24 4/9/2019

Analyzing Quicksort: Average Case We can solve this recurrence using the dreaded substitution method Guess the answer T(n) = O(n lg n) Assume that the inductive hypothesis holds What’s the inductive hypothesis? Substitute it in for some value < n Prove that it follows for n David Luebke 25 4/9/2019

Analyzing Quicksort: Average Case We can solve this recurrence using the dreaded substitution method Guess the answer T(n) = O(n lg n) Assume that the inductive hypothesis holds T(n)  an lg n + b for some constants a and b Substitute it in for some value < n Prove that it follows for n David Luebke 26 4/9/2019

Analyzing Quicksort: Average Case We can solve this recurrence using the dreaded substitution method Guess the answer T(n) = O(n lg n) Assume that the inductive hypothesis holds T(n)  an lg n + b for some constants a and b Substitute it in for some value < n What value? Prove that it follows for n David Luebke 27 4/9/2019

Analyzing Quicksort: Average Case We can solve this recurrence using the dreaded substitution method Guess the answer T(n) = O(n lg n) Assume that the inductive hypothesis holds T(n)  an lg n + b for some constants a and b Substitute it in for some value < n The value k in the recurrence Prove that it follows for n David Luebke 28 4/9/2019

Analyzing Quicksort: Average Case We can solve this recurrence using the dreaded substitution method Guess the answer T(n) = O(n lg n) Assume that the inductive hypothesis holds T(n)  an lg n + b for some constants a and b Substitute it in for some value < n The value k in the recurrence Prove that it follows for n Grind through it… David Luebke 29 4/9/2019

Analyzing Quicksort: Average Case The recurrence to be solved Plug in inductive hypothesis What are we doing here? Expand out the k=0 case What are we doing here? 2b/n is just a constant, so fold it into (n) What are we doing here? Note: leaving the same recurrence as the book David Luebke 30 4/9/2019

Analyzing Quicksort: Average Case The recurrence to be solved Distribute the summation What are we doing here? Evaluate the summation: b+b+…+b = b (n-1) What are we doing here? This summation gets its own set of slides later Since n-1<n, 2b(n-1)/n < 2b What are we doing here? David Luebke 31 4/9/2019

Analyzing Quicksort: Average Case The recurrence to be solved What the hell? We’ll prove this later Distribute the (2a/n) term What are we doing here? Remember, our goal is to get T(n)  an lg n + b What are we doing here? Pick a large enough that an/4 dominates (n)+b How did we do this? David Luebke 32 4/9/2019

Analyzing Quicksort: Average Case So T(n)  an lg n + b for certain a and b Thus the induction holds Thus T(n) = O(n lg n) Thus quicksort runs in O(n lg n) time on average (phew!) Oh yeah, the summation… David Luebke 33 4/9/2019

Tightly Bounding The Key Summation Split the summation for a tighter bound What are we doing here? The lg k in the second term is bounded by lg n What are we doing here? Move the lg n outside the summation What are we doing here? David Luebke 34 4/9/2019

Tightly Bounding The Key Summation The summation bound so far The lg k in the first term is bounded by lg n/2 What are we doing here? lg n/2 = lg n - 1 What are we doing here? Move (lg n - 1) outside the summation What are we doing here? David Luebke 35 4/9/2019

Tightly Bounding The Key Summation The summation bound so far What are we doing here? Distribute the (lg n - 1) The summations overlap in range; combine them What are we doing here? The Guassian series What are we doing here? David Luebke 36 4/9/2019

Tightly Bounding The Key Summation The summation bound so far Rearrange first term, place upper bound on second What are we doing here? What are we doing? X Guassian series Multiply it all out What are we doing? David Luebke 37 4/9/2019

Tightly Bounding The Key Summation David Luebke 38 4/9/2019