Sorting & Master Theorem
CS16: Introduction to Data Structures & Algorithms Spring 2020
Sorting & Master Theorem CS16: Introduction to Data Structures - - PowerPoint PPT Presentation
Sorting & Master Theorem CS16: Introduction to Data Structures & Algorithms Spring 2020 Outline Motivation Quadratic Sorting Selection sort Insertion sort Linearithmic Sorting Merge Sort Master Theorem
Sorting & Master Theorem
CS16: Introduction to Data Structures & Algorithms Spring 2020
Outline
The Problem
10 19 7 4 3 21 10 23 24 18 1 8 23 1 12 1 1 3 4 7 8 10 10 12 18 19 21 23 23 24
Sorting is Serious!
4Sorting Competition
Why?
Sorting Algorithms
“In-Placeness”
Not in-place! in-place
Properties of In-Place Solutions
Outline
Selection Sort
Selection Sort
Selection Sort
from remaining set
53 25 13 22 9 9 25 13 22 53 9 13 25 22 53 9 13 22 25 53 9 13 22 25 53 min min min min
Selection Sort
14 function selection_sort(A): n = A.length for i = 0 to n-2: min = argmin(A[i:n-1]) swap A[i] with A[min]Outline
Insertion Sort
Insertion Sort
before it…
position
53 25 13 22 23 25 53 13 22 23 13 25 53 22 23 13 22 25 53 23 13 22 23 25 53
Note: 23 > 22 so don’t need to keep checking since rest is already sortedInsertion Sort
18 function insertion_sort(A): n = A.length for i = 1 to n-1: for j = i down to 1: if a[j] < a[j-1]: swap a[j] and a[j-1] else: break # out of the inner for loop # this prevents double checking the # already sorted portionOutline
Divide & Conquer
solution for S
Merge Sort
Merge Sort
Merge Sort Recursion Tree
23 7 2 9 4 3 8 6 1 7 2 9 4 7 2 7 2 7 ➞ 2 ➞ ➞ 2 7 9 4 9 9 ➞ 4 4 ➞ ➞ 4 9 ➞ 2 7 4 9 3 8 6 1 ➞ 1 3 6 8 3 8 ➞ 3 8 3 3 ➞ 8 8 ➞ 6 1 ➞ 1 6 6 6 ➞ 1 1 ➞ ➞ 1 2 3 4 6 7 8 9Merge Sort Pseudo-Code
24 function mergeSort(A): if A.length <= 1: return A mid = A.length/2 left = mergeSort(A[0...mid-1]) right = mergeSort(A[mid...n-1]) return merge(left, right)Merge Sort Pseudo-Code
25 function merge(A, B): result = [] aIndex = 0 bIndex = 0 while aIndex < A.length and bIndex < B.length: if A[aIndex] <= B[bIndex]: result.append(A[aIndex]) aIndex++ else: result.append(B[bIndex]) bIndex++ if aIndex < A.length: result = result + A[aIndex:end] if bIndex < B.length: result = result + B[bIndex:end] return resultMerge Sort
26Activity #1
Merge Sort
27Activity #1
Merge Sort
28Activity #1
Merge Sort
29Activity #1
Merge Sort Recurrence Relation
Merge Sort Recurrence Relation
T(n) = T ⇣n 2 ⌘ + T ⇣n 2 ⌘ + O(n) = 2 · T ⇣n 2 ⌘ + O(n) T(1) = c
Merge Sort Recurrence Relation
T(1) = c1 T(2) = 2 · T(1) + 2 = 2c1 + 2 T(4) = 2 · T(2) + 4 = 2(2c1 + 2)4 = 4c1 + 8 T(8) = 2 · T(4) + 8 = 2(4c1 + 8) + 8 = 8c1 + 24 T(16) = 2 · T(8) + 16 = 2(8c1 + 24) + 16 = 16c1 + 64 T(n) = nc1 + n log n = O(n log n)
Analysis of Merge Sort
2 n/2 1 4 n/4 2 8 n/4 ⋮ ⋮ ⋮ k 2k+1 n/2k+1
… … …
Analysis of Merge Sort
induction)
Outline
The Master Theorem
solutions
37T(n) = a · T ⇣n b ⌘ + Θ(nd)
The Master Theorem
= Θ(n1 log n) = Θ(n log n)
38Master Theorem
39Activity #2+3
T(n) = a · T ⇣n b ⌘ + Θ(nd)
Master Theorem
40Activity #2+3
T(n) = a · T ⇣n b ⌘ + Θ(nd)
Master Theorem
41Activity #2+3
T(n) = a · T ⇣n b ⌘ + Θ(nd)
Master Theorem
42Activity #2+3
T(n) = a · T ⇣n b ⌘ + Θ(nd)
Outline
Quicksort
and partition set into
Quicksort
46Activity #4
Quicksort
47Activity #4
Quicksort
48Activity #4
Quicksort
49Activity #4
Merge Sort Recursion Tree
50 7 2 9 4 3 7 6 1 2 4 3 1 1 1 ➞ 4 3 4 4 ➞ ➞ 3 4 ➞ 1 2 3 4 7 9 7 ➞ 7 7 9 ➞ 1 2 3 4 6 7 7 9 9 9 ➞Quicksort Pseudo-Code
51 function quick_sort(A): if A.length ≤ 1 return A pivot = random element from A L = [], E = [], G = [] for each x in A: if x < pivot: L.append(x) else if x > pivot: G.append(x) else E.append(x) return quick_sort(L) + E + quick_sort(G)Worst-Case Running Time
n 1 n-1 2 n-2 ⋮ ⋮ n-1 1
…
Worst-Case Running Time
…
n−2 Y i=0 1 n − i = 1 n! <latexit sha1_base64="l+xIMYy43s9Dm02gkIWvgTNUI=">ACFnicbVDLSgMxFM3UV62vqks30SK4cZgpgroFN24rGBtoTOWTJpQzPJkGSEMsxfuPFX3LhQcSvu/BvTdha19UDg3HPu5eaeIGZUacf5sQpLyura8X10sbm1vZOeXfvXolEYtLEgnZDpAijHLS1FQz0o4lQVHASCsYXo/91iORigp+p0cx8SPU5zSkGkjdcu2F0vR6a05mQPKT+tZtALJcKpm5mKZrA2Ux9m3XLFsZ0J4CJxc1IBORrd8rfXEziJCNeYIaU6rhNrP0VSU8xIVvISRWKEh6hPOoZyFBHlp5O7MnhslB4MhTSPazhRZydSFCk1igLTGSE9UPeWPzP6yQ6vPBTyuNE46ni8KEQS3gOCTYo5JgzUaGICyp+SvEA2Ri0CbKkgnBnT95kTSr9qXt3p5V6ld5GkVwAI7ACXDBOaiDG9ATYDBE3gBb+DderZerQ/rc9pasPKZfAH1tcvdB+fDg=</latexit><latexit sha1_base64="l+xIMYy43s9Dm02gkIWvgTNUI=">ACFnicbVDLSgMxFM3UV62vqks30SK4cZgpgroFN24rGBtoTOWTJpQzPJkGSEMsxfuPFX3LhQcSvu/BvTdha19UDg3HPu5eaeIGZUacf5sQpLyura8X10sbm1vZOeXfvXolEYtLEgnZDpAijHLS1FQz0o4lQVHASCsYXo/91iORigp+p0cx8SPU5zSkGkjdcu2F0vR6a05mQPKT+tZtALJcKpm5mKZrA2Ux9m3XLFsZ0J4CJxc1IBORrd8rfXEziJCNeYIaU6rhNrP0VSU8xIVvISRWKEh6hPOoZyFBHlp5O7MnhslB4MhTSPazhRZydSFCk1igLTGSE9UPeWPzP6yQ6vPBTyuNE46ni8KEQS3gOCTYo5JgzUaGICyp+SvEA2Ri0CbKkgnBnT95kTSr9qXt3p5V6ld5GkVwAI7ACXDBOaiDG9ATYDBE3gBb+DderZerQ/rc9pasPKZfAH1tcvdB+fDg=</latexit><latexit sha1_base64="l+xIMYy43s9Dm02gkIWvgTNUI=">ACFnicbVDLSgMxFM3UV62vqks30SK4cZgpgroFN24rGBtoTOWTJpQzPJkGSEMsxfuPFX3LhQcSvu/BvTdha19UDg3HPu5eaeIGZUacf5sQpLyura8X10sbm1vZOeXfvXolEYtLEgnZDpAijHLS1FQz0o4lQVHASCsYXo/91iORigp+p0cx8SPU5zSkGkjdcu2F0vR6a05mQPKT+tZtALJcKpm5mKZrA2Ux9m3XLFsZ0J4CJxc1IBORrd8rfXEziJCNeYIaU6rhNrP0VSU8xIVvISRWKEh6hPOoZyFBHlp5O7MnhslB4MhTSPazhRZydSFCk1igLTGSE9UPeWPzP6yQ6vPBTyuNE46ni8KEQS3gOCTYo5JgzUaGICyp+SvEA2Ri0CbKkgnBnT95kTSr9qXt3p5V6ld5GkVwAI7ACXDBOaiDG9ATYDBE3gBb+DderZerQ/rc9pasPKZfAH1tcvdB+fDg=</latexit><latexit sha1_base64="l+xIMYy43s9Dm02gkIWvgTNUI=">ACFnicbVDLSgMxFM3UV62vqks30SK4cZgpgroFN24rGBtoTOWTJpQzPJkGSEMsxfuPFX3LhQcSvu/BvTdha19UDg3HPu5eaeIGZUacf5sQpLyura8X10sbm1vZOeXfvXolEYtLEgnZDpAijHLS1FQz0o4lQVHASCsYXo/91iORigp+p0cx8SPU5zSkGkjdcu2F0vR6a05mQPKT+tZtALJcKpm5mKZrA2Ux9m3XLFsZ0J4CJxc1IBORrd8rfXEziJCNeYIaU6rhNrP0VSU8xIVvISRWKEh6hPOoZyFBHlp5O7MnhslB4MhTSPazhRZydSFCk1igLTGSE9UPeWPzP6yQ6vPBTyuNE46ni8KEQS3gOCTYo5JgzUaGICyp+SvEA2Ri0CbKkgnBnT95kTSr9qXt3p5V6ld5GkVwAI7ACXDBOaiDG9ATYDBE3gBb+DderZerQ/rc9pasPKZfAH1tcvdB+fDg=</latexit>Worst-Case Running Time
…
X all rand choices c Pr[Alg makes choice c] · Time(Alg with choice c) <latexit sha1_base64="/PLrt6zTK7Z5PQAVxbz60Gy2U6M=">ACZnicbZFLbxMxFIU9w6uERwMFsWBjESGVTRTIQG7lm5YBqmhlTKj6I7nTmLFj5F9B4hGw4/sj0b/kWdBah5UqWj879rmwfF7WSnpLkdxTfuXv/oO9h4NHj583R8+e/7N28YJnAqrLsowKOSBqckSeF7RB0ofC8WJ1u+uf0XlpzRmta8w1LIyspAK1nz4K/ONnrcZ4U8y1mlQLSjFHZiSi6WVAj0XcfbzFd84rZLnmiFhnXsEKf9XDYu5xnorTEd8kzqfEw4PyHpGXPcvGumw9HyTjZFr8t0l6MWF+T+fAyK61oNBoSCryfpUlNeQuOpFDYDbLGYw1iBQucBWlAo8/bU4dfxucklfWhWIb93diRa092tdBFIDLf3N3sb8X2/WUPUxb6WpG0Ijrg+qGsXJ8k3ovJQOBal1ECcDHcNGYADQeFrBiGE9OaTb4vp0fjTOP36fnT8uU9j71mb9ghS9kHdsy+sAmbMsH+RIPoIHoR/Y345fxq2s0jvqZA/ZPxfwK0nK6UQ=</latexit><latexit sha1_base64="/PLrt6zTK7Z5PQAVxbz60Gy2U6M=">ACZnicbZFLbxMxFIU9w6uERwMFsWBjESGVTRTIQG7lm5YBqmhlTKj6I7nTmLFj5F9B4hGw4/sj0b/kWdBah5UqWj879rmwfF7WSnpLkdxTfuXv/oO9h4NHj583R8+e/7N28YJnAqrLsowKOSBqckSeF7RB0ofC8WJ1u+uf0XlpzRmta8w1LIyspAK1nz4K/ONnrcZ4U8y1mlQLSjFHZiSi6WVAj0XcfbzFd84rZLnmiFhnXsEKf9XDYu5xnorTEd8kzqfEw4PyHpGXPcvGumw9HyTjZFr8t0l6MWF+T+fAyK61oNBoSCryfpUlNeQuOpFDYDbLGYw1iBQucBWlAo8/bU4dfxucklfWhWIb93diRa092tdBFIDLf3N3sb8X2/WUPUxb6WpG0Ijrg+qGsXJ8k3ovJQOBal1ECcDHcNGYADQeFrBiGE9OaTb4vp0fjTOP36fnT8uU9j71mb9ghS9kHdsy+sAmbMsH+RIPoIHoR/Y345fxq2s0jvqZA/ZPxfwK0nK6UQ=</latexit><latexit sha1_base64="/PLrt6zTK7Z5PQAVxbz60Gy2U6M=">ACZnicbZFLbxMxFIU9w6uERwMFsWBjESGVTRTIQG7lm5YBqmhlTKj6I7nTmLFj5F9B4hGw4/sj0b/kWdBah5UqWj879rmwfF7WSnpLkdxTfuXv/oO9h4NHj583R8+e/7N28YJnAqrLsowKOSBqckSeF7RB0ofC8WJ1u+uf0XlpzRmta8w1LIyspAK1nz4K/ONnrcZ4U8y1mlQLSjFHZiSi6WVAj0XcfbzFd84rZLnmiFhnXsEKf9XDYu5xnorTEd8kzqfEw4PyHpGXPcvGumw9HyTjZFr8t0l6MWF+T+fAyK61oNBoSCryfpUlNeQuOpFDYDbLGYw1iBQucBWlAo8/bU4dfxucklfWhWIb93diRa092tdBFIDLf3N3sb8X2/WUPUxb6WpG0Ijrg+qGsXJ8k3ovJQOBal1ECcDHcNGYADQeFrBiGE9OaTb4vp0fjTOP36fnT8uU9j71mb9ghS9kHdsy+sAmbMsH+RIPoIHoR/Y345fxq2s0jvqZA/ZPxfwK0nK6UQ=</latexit><latexit sha1_base64="/PLrt6zTK7Z5PQAVxbz60Gy2U6M=">ACZnicbZFLbxMxFIU9w6uERwMFsWBjESGVTRTIQG7lm5YBqmhlTKj6I7nTmLFj5F9B4hGw4/sj0b/kWdBah5UqWj879rmwfF7WSnpLkdxTfuXv/oO9h4NHj583R8+e/7N28YJnAqrLsowKOSBqckSeF7RB0ofC8WJ1u+uf0XlpzRmta8w1LIyspAK1nz4K/ONnrcZ4U8y1mlQLSjFHZiSi6WVAj0XcfbzFd84rZLnmiFhnXsEKf9XDYu5xnorTEd8kzqfEw4PyHpGXPcvGumw9HyTjZFr8t0l6MWF+T+fAyK61oNBoSCryfpUlNeQuOpFDYDbLGYw1iBQucBWlAo8/bU4dfxucklfWhWIb93diRa092tdBFIDLf3N3sb8X2/WUPUxb6WpG0Ijrg+qGsXJ8k3ovJQOBal1ECcDHcNGYADQeFrBiGE9OaTb4vp0fjTOP36fnT8uU9j71mb9ghS9kHdsy+sAmbMsH+RIPoIHoR/Y345fxq2s0jvqZA/ZPxfwK0nK6UQ=</latexit>Expected Runtime of Quicksort
Expected Runtime of Quicksort
T(n) = 2n ln n = 1.39 · n log2 n = O(n log n)
n) = n + 1 n · ✓ T(0) + T(n − 1) ◆ + · · · + 1 n · ✓ T(n − 1) + T(n − 1 − (n − 1)) ◆ = n + 1 n · n−1 X i=0 ✓ T(i) + T(n − 1 − i) ◆ E[T(n)] <latexit sha1_base64="4bu6MKxb/sduGr61tJWzgPtDPo=">AB+HicbVBNS8NAFHypX7V+RT16WSxCvZREBPVWFMFjhcYW0lA27dLMJu5tCf0nXjyoePWnePfuGlz0NaBhWHmPd7shAlnSjvOt1VaW9/Y3CpvV3Z29/YP7MOjJxWnklCPxDyWnRArypmgnma04iKY5CTtvh+C732xMqFYtFS08TGkR4KNiAEayN1LPtboT1KAyz+5nfqonzoGdXnbozB1olbkGqUKDZs7+6/ZikERWacKyU7zqJDjIsNSOczirdVNEkzEeUt9QgSOqgmyefIbOjNJHg1iaJzSaq783MhwpNY1CM5nVMteLv7n+akeXAcZE0mqSCLQ4OUIx2jvAbUZ5ISzaeGYCKZyYrICEtMtCmrYkpwl7+8SryL+k3dfbysNm6LNspwAqdQAxeuoAEP0AQPCEzgGV7hzcqsF+vd+liMlqxi5xj+wPr8ATzYkvE=</latexit><latexit sha1_base64="4bu6MKxb/sduGr61tJWzgPtDPo=">AB+HicbVBNS8NAFHypX7V+RT16WSxCvZREBPVWFMFjhcYW0lA27dLMJu5tCf0nXjyoePWnePfuGlz0NaBhWHmPd7shAlnSjvOt1VaW9/Y3CpvV3Z29/YP7MOjJxWnklCPxDyWnRArypmgnma04iKY5CTtvh+C732xMqFYtFS08TGkR4KNiAEayN1LPtboT1KAyz+5nfqonzoGdXnbozB1olbkGqUKDZs7+6/ZikERWacKyU7zqJDjIsNSOczirdVNEkzEeUt9QgSOqgmyefIbOjNJHg1iaJzSaq783MhwpNY1CM5nVMteLv7n+akeXAcZE0mqSCLQ4OUIx2jvAbUZ5ISzaeGYCKZyYrICEtMtCmrYkpwl7+8SryL+k3dfbysNm6LNspwAqdQAxeuoAEP0AQPCEzgGV7hzcqsF+vd+liMlqxi5xj+wPr8ATzYkvE=</latexit><latexit sha1_base64="4bu6MKxb/sduGr61tJWzgPtDPo=">AB+HicbVBNS8NAFHypX7V+RT16WSxCvZREBPVWFMFjhcYW0lA27dLMJu5tCf0nXjyoePWnePfuGlz0NaBhWHmPd7shAlnSjvOt1VaW9/Y3CpvV3Z29/YP7MOjJxWnklCPxDyWnRArypmgnma04iKY5CTtvh+C732xMqFYtFS08TGkR4KNiAEayN1LPtboT1KAyz+5nfqonzoGdXnbozB1olbkGqUKDZs7+6/ZikERWacKyU7zqJDjIsNSOczirdVNEkzEeUt9QgSOqgmyefIbOjNJHg1iaJzSaq783MhwpNY1CM5nVMteLv7n+akeXAcZE0mqSCLQ4OUIx2jvAbUZ5ISzaeGYCKZyYrICEtMtCmrYkpwl7+8SryL+k3dfbysNm6LNspwAqdQAxeuoAEP0AQPCEzgGV7hzcqsF+vd+liMlqxi5xj+wPr8ATzYkvE=</latexit><latexit sha1_base64="4bu6MKxb/sduGr61tJWzgPtDPo=">AB+HicbVBNS8NAFHypX7V+RT16WSxCvZREBPVWFMFjhcYW0lA27dLMJu5tCf0nXjyoePWnePfuGlz0NaBhWHmPd7shAlnSjvOt1VaW9/Y3CpvV3Z29/YP7MOjJxWnklCPxDyWnRArypmgnma04iKY5CTtvh+C732xMqFYtFS08TGkR4KNiAEayN1LPtboT1KAyz+5nfqonzoGdXnbozB1olbkGqUKDZs7+6/ZikERWacKyU7zqJDjIsNSOczirdVNEkzEeUt9QgSOqgmyefIbOjNJHg1iaJzSaq783MhwpNY1CM5nVMteLv7n+akeXAcZE0mqSCLQ4OUIx2jvAbUZ5ISzaeGYCKZyYrICEtMtCmrYkpwl7+8SryL+k3dfbysNm6LNspwAqdQAxeuoAEP0AQPCEzgGV7hzcqsF+vd+liMlqxi5xj+wPr8ATzYkvE=</latexit> Don’t need to know the proof of this.Quicksort Pseudo-Code
57 function quick_sort(A): if A.length ≤ 1 return A pivot = random element from A L = [], E = [], G = [] for each x in A: if x < pivot: L.append(x) else if x > pivot: G.append(x) else E.append(x) return quick_sort(L) + E + quick_sort(G) Not in place!In-Place Quicksort
58 function partition(A, low, high): pivotIndex = random index between low and high pivotValue = A[pivotIndex] swap A[pivotIndex] and A[high] # move pivot to end currIndex = low for i from low to high – 1: if A[i] <= pivotValue : swap A[i] and A[currIndex] currIndex++ swap A[currIndex] and A[high] # move the pivot back return currIndexIn-Place Quicksort
59 function quicksort(A, low, high): if low < high: pivotIndex = partition(A, low, high) quicksort(A, low, pivotIndex – 1) quicksort(A, pivotIndex + 1, high)Merge Sort vs. Quicksort
Outline
How Fast Can We Sort?
Any comparison-based sorting algorithm has to make at least Ω(n log n) comparisons in the worst- case to sort n keys
Lower Bound on Comparative Sorting
k1 k2 k3 k4 Sorting Algorithm k3 k1 k4 k2
Lower Bound on Comparative Sorting
can be modeled as
Lower Bound on Comparative Sorting
≤ ≤ ≤ ≤ ≤ > > > > >
Equal terms will be considered ≤ but ≥ would also workLower Bound on Comparative Sorting
≤ ≤ ≤ ≤ ≤ > > > > >
Equal terms will be considered ≤ but ≥ would also workLower Bound on Comparative Sorting
Non-Comparative Sorting
types of inputs as long as we can compare them
Radix Sort
258391 and 258492?
Radix Sort
Radix Sort
that it can work over multi-digit numbers
Radix Sort
Radix Sort
Radix Sort
Radix Sort
Radix Sort
More on Radix Sort
sort with two buckets but
Radix Sort
78Activity #5
Radix Sort
79Activity #5
Radix Sort
80Activity #5
Radix Sort
81Activity #5
Summary of Sorting Algorithms
82Algorithm Time Notes
Selection sort O(n2) in-place slow (good for small inputs) Insertion sort O(n2) in-place slow (good for small inputs) Merge sort O(n log n) fast (good for large inputs) Quick sort O(n log n) expected randomized fastest (good for large inputs) Radix sort O(nd) d is number of digits in largest number basically linear when d is smallReadings
theorem
comparative sorting
83References
Radix) from the Anime Dragon Ball Z. He is the biological brother of Goku and one of the four remaining Universe 7 Saiyans.
Tang Clan. He also released albums as his alter ego Bobby Digital
84