computer science 112
DESCRIPTION
Computer Science 112. Fundamentals of Programming II Bucket Sort: An O( N ) Sort Algorithm. N 2 and N log 2 N Sort Algorithms. Selection sort and bubble sort are O( N 2 ), because they run nested loops over the entire list - PowerPoint PPT PresentationTRANSCRIPT
Computer Science 112
Fundamentals of Programming IIBucket Sort: An O(N) Sort Algorithm
N2 and Nlog2N Sort Algorithms
• Selection sort and bubble sort are O(N2), because they run nested loops over the entire list
• Quicksort and heap sort are O(Nlog2N), because one executes a linear process log2N times and the other executes a log2N process N times
An O(N) Sort Algorithm
Consider a sorted list of unique integers, ranging from 0 to N - 1:
0 1 2 3 0 1 2 3 4
4
An O(N) Sort Algorithm
Consider a sorted list of unique integers, ranging from 0 to N - 1:
0 1 2 3 0 1 2 3 4
4
Shuffle the list to randomize the numbers:
2 1 0 4 0 1 2 3 4
3
An O(N) Sort Algorithm
Consider a sorted list of unique integers, ranging from 0 to N - 1:
0 1 2 3 0 1 2 3 4
4
Shuffle the list to randomize the numbers:
2 1 0 4 0 1 2 3 4
3
How can we sort this randomly ordered list in linear time?
An O(N) Sort Algorithm
0 1 2 3 4
Create a temporary array of length N:
2 1 0 4 0 1 2 3 4
3
How can we sort this randomly ordered list in linear time?
An O(N) Sort Algorithm
2 0 1 2 3 4
2 1 0 4 0 1 2 3 4
3
How can we sort this randomly ordered list in linear time?
For each integer in the unsorted list: Copy the integer to the array at that position
An O(N) Sort Algorithm
1 2 0 1 2 3 4
2 1 0 4 0 1 2 3 4
3
How can we sort this randomly ordered list in linear time?
For each integer in the unsorted list: Copy the integer to the array at that position
An O(N) Sort Algorithm
0 1 2 0 1 2 3 4
2 1 0 4 0 1 2 3 4
3
How can we sort this randomly ordered list in linear time?
For each integer in the unsorted list: Copy the integer to the array at that position
An O(N) Sort Algorithm
0 1 2 0 1 2 3 4
4
2 1 0 4 0 1 2 3 4
3
How can we sort this randomly ordered list in linear time?
For each integer in the unsorted list: Copy the integer to the array at that position
An O(N) Sort Algorithm
0 1 2 3 0 1 2 3 4
4
2 1 0 4 0 1 2 3 4
3
How can we sort this randomly ordered list in linear time?
For each integer in the unsorted list: Copy the integer to the array at that position
An O(N) Sort Algorithm
0 1 2 3 0 1 2 3 4
4
0 1 2 3 4
How can we sort this randomly ordered list in linear time?
For each integer in the unsorted list: Copy the integer to the array at that positionCopy ‘em back to the list
0 1 2 3 4
Complexity Analysis
0 1 2 3 0 1 2 3 4
4
0 1 2 3 4
How can we sort this randomly ordered list in linear time?
For each integer in the unsorted list: Copy the integer to the array at that positionCopy ‘em back to the list
0 1 2 3 4
No comparisons!
2 * N assignments
O(N) memory
Lists with Duplicate Items
0 1 2 3 4
Create a temporary array of linked lists of length K, for the integers in the list ranging from 0 to K - 1:
2 1 0 4 0 1 2 3 4 5 6 7
3 0 1 1
Each linked list will serve as a bucket to receive items from the original list
Lists with Duplicate Items
0 1 2 3 4
Copy items from the original list to the corresponding buckets in the array
2 1 0 4 0 1 2 3 4 5 6 7
3 0 1 1
1
1
1
0 2 3 4
0
Lists with Duplicate Items
Copy ‘em back to the original list
0 0 1 1 0 1 2 3 4 5 6 7
1 2 3 4
0 1 2 3 4
1
1
1
0 2 3 4
0
No comparisons!
2 * N assignments
O(N + K) memory
Generalize to a Keyed List
• Each item in the list must have an integer key
• The keys can be repeated, but must be integers from 0 through a positive upper bound
• The keys can be stored with the items, or computed as needed
Computer Science 112
from arrays import Arrayfrom node import Node
def bucketSort(keyedList): # Create an array to accommodate the keys array = Array(keyedList.getMaxKey())
# Copy items from the list to the buckets for item in keyedList: key = item.getKey() array[key] = Node(item, array[key])
# Copy items from buckets back to the list index = 0 for node in array: while node != None: keyedList[index] = node.data node = node.next index += 1
Bucket Sort of a Keyed List
Some Buckets Can Be Empty
0 1 2 3 4
3 1 0 4 0 1 2 3 4 5 6 7
3 0 1 1
1
1
1
0
3
3 4
0
For Wednesday
Hashing and O(k) Sets and Dictionaries