CmSc 250 Intro to Algorithms
Applications of Priority Queues - the Selection Problem
- The problem
Given a list of N elements (here "list" means a sequence, it does not mean ADT list)
and an integer k, k £ N, find the kth
largest element.
Sort the elements in an array and return the element in the kth position.
Complexity:
Read k elements in an array and sort them. Let Sk be the smallest element.
For each next element E do the following:
Complexity: O(N*k)
Worst case: k = N/2, complexity: O(N2)
Assume we change the heap-order property - the highest priority corresponds to the highest key value.
Read N elements in an arrayComplexity: O(N) + O(klogN)
For k = N/2 the complexity is O(NlogN)
We return back to the usual heap-order property – the smallest element is at the top.
Build a heap of k elements. The k-th largest element among k elements is the smallest element in that heap and it will be at the top. Complexity O(k)
Compare each next element with the top element O(1)
If the new element is larger, DeleteMin the top element and insert the new
element in the heap. - O(log(k))
At the end of the input the smallest element in the heap is the k-th largest element in the list of N elements.
Complexity: O(k) + O((N-k)*log(k)) = O(Nlog(k))