| <?xml version="1.0" encoding="UTF-8"?> |
| <!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd"> |
| <pkgmetadata> |
| <maintainer type="project"> |
| <email>haskell@gentoo.org</email> |
| <name>Gentoo Haskell</name> |
| </maintainer> |
| <longdescription> |
| The psqueues package provides |
| <http://en.wikipedia.org/wiki/Priority_queue Priority Search Queues> in |
| three different flavors. |
| |
| * @OrdPSQ k p v@, which uses the @Ord k@ instance to provide fast insertion, |
| deletion and lookup. This implementation is based on Ralf Hinze's |
| <http://citeseer.ist.psu.edu/hinze01simple.html A Simple Implementation Technique for Priority Search Queues>. |
| Hence, it is similar to the |
| <http://hackage.haskell.org/package/PSQueue 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 |
| to @Int@ and uses a <http://en.wikipedia.org/wiki/Radix_tree radix tree> |
| (like @IntMap@) with an additional min-heap property. |
| |
| * @HashPSQ k p v@ is a fairly straightforward extension of @IntPSQ@: it |
| simply uses the keys' hashes as indices in the @IntPSQ@. If there are any |
| hash collisions, it uses an @OrdPSQ@ to resolve those. The performance of |
| this implementation is comparable to that of @IntPSQ@, but it is more widely |
| applicable since the keys are not restricted to @Int@, but rather to any |
| @Hashable@ datatype. |
| |
| Each of the three implementations provides the same API, so they can be used |
| interchangeably. The benchmarks show how they perform relative to one |
| another, and also compared to the other Priority Search Queue |
| implementations on Hackage: |
| <http://hackage.haskell.org/package/PSQueue PSQueue> |
| and |
| <http://hackage.haskell.org/package/fingertree-psqueue fingertree-psqueue>. |
| |
| <<http://i.imgur.com/KmbDKR6.png>> |
| |
| <<http://i.imgur.com/ClT181D.png>> |
| |
| Typical applications of Priority Search Queues include: |
| |
| * Caches, and more specifically LRU Caches; |
| |
| * Schedulers; |
| |
| * Pathfinding algorithms, such as Dijkstra's and A*. |
| </longdescription> |
| </pkgmetadata> |