The psqueues package provides Priority Search Queues in three different flavors:
OrdPSQ k p v
, which uses theOrd k
instance to provide fast insertion, deletion and lookup. This implementation is based on Ralf Hinze's A Simple Implementation Technique for Priority Search Queues.Hence, it is similar to the PSQueue library, although it is considerably faster and provides a slightly different API.
IntPSQ p v
is a far more efficient implementation. It fixes the key type toInt
and uses ahttps://en.wikipedia.org/wiki/Radix_tree, radix tree
(likeIntMap
) with an additional min-heap property.HashPSQ k p v
is a fairly straightforward extension ofIntPSQ
: it simply uses the keys' hashes as indices in theIntPSQ
. If there are any hash collisions, it uses anOrdPSQ
to resolve those. The performance of this implementation is comparable to that ofIntPSQ
, but it is more widely applicable since the keys are not restricted toInt
, but rather to anyHashable
datatype.
Each of the three implementations provides the same API, so they can be used interchangeably.
Typical applications of Priority Search Queues include:
Caches, and more specifically LRU Caches;
Schedulers;
Pathfinding algorithms, such as Dijkstra's and A*.