priority queue
DESCRIPTION
Priority Queue. A Priority Queue Set S is made up of n elements: x 0 x 1 x 2 x 3 … x n-1 Functions: createEmptySet() returns a newly created empty priority queue findMin(S) returns the minimum node with respect to ordering insert(S, x) returns S with x added - PowerPoint PPT PresentationTRANSCRIPT
Priority Queue
A Priority Queue Set S is made up of n elements: x0 x1 x2 x3 … xn-1
Functions:
createEmptySet() returns a newly created empty priority queue
findMin(S) returns the minimum node with respect to ordering
insert(S, x) returns S with x added
deleteMin(S) returns S with the minimum node removed
isEmptySet(S) returns true if S is empty and false if it is not
Homework 6
• Describe how to implement a priority queue that has a worst case findMin in O(1) time and insert and deleteMin in no more than O(lg n) time. You can assume that n is always less than 128. In other words, there is a max of 127 elements that can be stored in the queue.
• Do the five Priority Queue functions.
Priority Queue – Array List
• Ordered Array List– findMin in constant time. – insert and deleteMin in O(n).
• Unordered Array List– insert in constant time. – findMin and deleteMin in O(n).
Priority Queue – Linked List
• Ordered Linked List– findMin and deleteMin in constant time. – insert in O(n).
• Unordered List– insert in constant time. – findMin and deleteMin in O(n).
Priority Queue Trees
• Binary Search Tree– Find can be more than O(lg n) if out of balance.– Insert and delete can be more than O(lg n).
• AVL Tree– Find is O(lg n) time.– Insert and delete are O(lg n).
Priority Queue Trees
• AVL Tree with pointer to smallest– Find is O(1) time.– Insert and delete are O(lg n).– Works, but is way too complicated for the task
• We need a simpler solution
Binary Tree -- Array
10 112 3 4 5 6 7 8 9 10
2 * i + 1 is the left child2 * i + 2 is the right child
Binary Tree -- Array
10 112 3 4 5 6 7 8 9 10
2 * i + 1 is the left child2 * i + 2 is the right child
Binary Tree -- Array
10 112 3 4 5 6 7 8 9 10
2 * i + 1 is the left child2 * i + 2 is the right child
createEmptySet()
Declare an array of type node.
Declare an int n that is the number of elements in the queue.
node s[128]
n = 0
return s
insert(s, x)
4
12
132511
9 10
14
7
15
6
5
21
m = parent-of(n-1)if s[n-1] < s[m] swap(s[n-1], s[m])
17
deleteMin(x)
5
12
132511
9 10
4
7
15
17
14
21
if s[0] < either of its childrenswap with the least of its children
Dictionaries
A Dictionary is a set S made up of n elements: x0 x1 x2 x3 … xn-1 that has
the following functions.
Functions:
createEmptySet() returns a newly created empty set
lookUp(S, k) returns the node in S that has the key k
insert(S, x) returns S with x added
delete(S, k) returns S with x (found using x.k) removed
isEmptySet(S) returns true if S is empty and false if it is not
Can we create a dictionary that takes constant time, in the worst case, to do lookUp, insert, and
delete?
Use the key as an index
• Create an array large enough to hold all the key possibilities.
• If we used SSN this would be: node s[1000000000]
• With this array we could look up a node using SSN as the key in constant time.
• Insert and delete will also be constant.
Key Direct
• Do we want to use an array of a billion elements to store 21 nodes?
• Is there a way to sacrifice some loss in speed to reduce the size of the array?
• Can we still maintain O(1) for the average time of findMin, deleteMin, and insert?
• What will the worst case time be?