Medians & Selection
CS16: Introduction to Data Structures & Algorithms Spring 2020
Medians & Selection CS16: Introduction to Data Structures & - - PowerPoint PPT Presentation
Medians & Selection CS16: Introduction to Data Structures & Algorithms Spring 2020 Outline Medians Selection Randomized Selection Medians The median of a collection of numbers is the middle element half of the
Medians & Selection
CS16: Introduction to Data Structures & Algorithms Spring 2020
Outline
Medians
Selection
Quickselect (Hoare’s Selection)
Quickselect (Hoare’s Selection)
L G E
Quickselect (Hoare’s Selection)
Quickselect Pseudo-code
8 quickselect(list, k): if list has 1 element return it pivot = list[rand(0, list.size)] L = [] E = [] G = [] for x in list: if x < pivot: L.append(x) if x == pivot: E.append(x) if x > pivot: G.append(x) if k <= L.size: return quickselect(L, k) else if k <= (L.size + E.size) return pivot else return quickselect(G, k – (L.size + E.size))Quickselect
9Activity #1+2
quickselect(list, k): if list has 1 element return it pivot = list[rand(0, list.size)] L = [] E = [] G = [] for x in list: if x < pivot: L.append(x) if x == pivot: E.append(x) if x > pivot: G.append(x) if k <= L.size: return quickselect(L, k) else if k <= (L.size + E.size) return pivot else return quickselect(G, k – (L.size + E.size))Quickselect
10Activity #1+2
quickselect(list, k): if list has 1 element return it pivot = list[rand(0, list.size)] L = [] E = [] G = [] for x in list: if x < pivot: L.append(x) if x == pivot: E.append(x) if x > pivot: G.append(x) if k <= L.size: return quickselect(L, k) else if k <= (L.size + E.size) return pivot else return quickselect(G, k – (L.size + E.size))Quickselect
11Activity #1+2
quickselect(list, k): if list has 1 element return it pivot = list[rand(0, list.size)] L = [] E = [] G = [] for x in list: if x < pivot: L.append(x) if x == pivot: E.append(x) if x > pivot: G.append(x) if k <= L.size: return quickselect(L, k) else if k <= (L.size + E.size) return pivot else return quickselect(G, k – (L.size + E.size))Quickselect
12Activity #1+2
quickselect(list, k): if list has 1 element return it pivot = list[rand(0, list.size)] L = [] E = [] G = [] for x in list: if x < pivot: L.append(x) if x == pivot: E.append(x) if x > pivot: G.append(x) if k <= L.size: return quickselect(L, k) else if k <= (L.size + E.size) return pivot else return quickselect(G, k – (L.size + E.size))Quickselect
13Activity #1+2
quickselect(list, k): if list has 1 element return it pivot = list[rand(0, list.size)] L = [] E = [] G = [] for x in list: if x < pivot: L.append(x) if x == pivot: E.append(x) if x > pivot: G.append(x) if k <= L.size: return quickselect(L, k) else if k <= (L.size + E.size) return pivot else return quickselect(G, k – (L.size + E.size))Quickselect Analysis
randomized)
Quickselect Analysis
E[T(n)] = (n − 1) + 1 n
n−1X
i=1T(i)
Don’t need to know the proof of this.Summary
Readings
chapter1_2/QuickSelAvgCase.pdf
17