Application of Heap Data Structure-Priority Queues 26
Application of Heap Data Structure-Priority Queues 26
Structure
Priority Queues
Priority Queue
• Priority Queue is similar to queue where we insert
an element from the back and remove an element
from front, but with a one difference that the logical
order of elements in the priority queue depends on
the priority of the elements.
• The element with highest priority will be moved to
the front of the queue and one with lowest priority
will move to the back of the queue.
• Thus it is possible that when you enqueue an
element at the back in the queue, it can move to
front because of its highest priority.
Example:
• Let’s say we have an array of 5 elements :
{4, 8, 1, 7, 3} and we have to insert all the
elements in the max-priority queue.
Naive Approach:
– Suppose we have N elements and we have to insert
these elements in the priority queue.
– We can use list and can insert elements in O(N)
time and can sort them to maintain a priority
queue in O(N logN ) time.
Efficient Approach:
– We can use heaps to implement the priority queue.
– It will take O(log N) time to insert and delete each
element in the priority queue.
– Based on heap structure, priority queue also has
two types max- priority queue and min - priority
queue.
• Max Priority Queue is based on the structure
of max heap and can perform following
operations:
Complexity: O(1)
Extract Maximum: In this operation, the maximum element will be returned
and the last element of heap will be placed at index 1 and max_heapify will
be performed on node 1 as placing last element on index 1 will violate the
property of max-heap.
int extract_maximum (int Arr[ ])
{
if(length == 0)
{ cout<< “Can’t remove element as queue is empty”;
return -1;
}
int max = Arr[1];
Arr[1] = Arr[length];
length = length -1;
max_heapify(Arr, 1);
return max;
} Complexity: O(logN)
Increase Value: In case increasing value of any node, may violate the
property of max-heap, so we will swap the parent’s value with the node’s
value until we get a larger value on parent node.
Complexity: O(log N)
Example:
Initially there are 5 elements in priority queue.
Operation: Insert Value(Arr, 6)
Operation: Extract Maximum:
In the diagram below, after removing 8 and placing 4 at node 1,
violates the property of max-priority queue. So max_heapify(Arr, 1)
will be performed which will maintain the property of max - priority
queue.
• As discussed above, like heaps we can use
priority queues in scheduling of jobs.
• When there are N jobs in queue, each having its
own priority.
• If the job with maximum priority will be
completed first and will be removed from the
queue, [we can use priority queue’s operation
extract_maximum here].
• If at every instant we have to add a new job in
the queue, we can use insert_value operation as
it will insert the element in O(log N) and will also
maintain the property of max heap.
Now, let’s give you a problem to ponder on:
1) How will you perform below operations for min
priority queue?