priority queue with limited space: looking for a good algorithm
Posted
by SigTerm
on Stack Overflow
See other posts from Stack Overflow
or by SigTerm
Published on 2010-05-29T04:11:51Z
Indexed on
2010/05/29
4:12 UTC
Read the original article
Hit count: 397
This is not a homework.
I'm using a small "priority queue" (implemented as array at the moment) for storing last N items with smallest value. This is a bit slow - O(N) item insertion time. Current implementation keeps track of largest item in array and discards any items that wouldn't fit into array, but I still would like to reduce number of operations further.
looking for a priority queue algorithm that matches following requirements:
- queue can be implemented as array, which has fixed size and _cannot_ grow. Dynamic memory allocation during any queue operation is strictly forbidden.
- Anything that doesn't fit into array is discarded, but queue keeps all smallest elements ever encountered.
- O(log(N)) insertion time (i.e. adding element into queue should take up to O(log(N))).
- (optional) O(1) access for *largest* item in queue (queue stores *smallest* items, so the largest item will be discarded first and I'll need them to reduce number of operations)
- Easy to implement/understand. Ideally - something similar to binary search - once you understand it, you remember it forever.
- Elements need not to be sorted in any way. I just need to keep N smallest value ever encountered. When I'll need them, I'll access all of them at once. So technically it doesn't have to be a queue, I just need N last smallest values to be stored.
I initially thought about using binary heaps (they can be easily implemented via arrays), but apparently they don't behave well when array can't grow anymore. Linked lists and arrays will require extra time for moving things around. stl priority queue grows and uses dynamic allocation (I may be wrong about it, though).
So, any other ideas?
© Stack Overflow or respective owner