Download presentation

Presentation is loading. Please wait.

Published byAlize Phippen Modified over 2 years ago

1
David Luebke 1 4/22/2015 CS 332: Algorithms Quicksort

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

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

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

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

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

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

8
David Luebke 8 4/22/2015 Partition Code Partition(A, p, r) x = A[p]; i = p - 1; j = r + 1; while (TRUE) repeat j--; until A[j] <= x; repeat 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() ?

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

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

11
David Luebke 11 4/22/2015 Analyzing Quicksort l In the worst case: T(1) = (1) T(n) = T(n - 1) + (n) l Works out to T(n) = (n 2 )

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

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

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

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

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

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

18
David Luebke 18 4/22/2015 Analyzing Quicksort: Average Case l 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 l Thus running time of alternating bad and good splits is still O(n lg n), with slightly higher constants l How can we be more rigorous?

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

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

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

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

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

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

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

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

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

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

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

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

31
David Luebke 31 4/22/2015 What are we doing here? Evaluate the summation: b+b+…+b = b (n-1) The recurrence to be solved Since n-1

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

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

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

35
David Luebke 35 4/22/2015 The summation bound so far Tightly Bounding The Key Summation What are we doing here? 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

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

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

38
David Luebke 38 4/22/2015 Tightly Bounding The Key Summation

Similar presentations

Presentation is loading. Please wait....

OK

Introduction to Algorithms Quicksort

Introduction to Algorithms Quicksort

© 2017 SlidePlayer.com Inc.

All rights reserved.

Ads by Google

Ppt online exam form Ppt on c programming notes Ppt on network switching techniques Ppt on data handling for grade 6 Ppt on universe and solar system Ppt on centring club Ppt on bluetooth hacking statistics Ppt on money and credit download Ppt on multivariate statistical analysis Ppt on respiration in plants and animals for class 7