The.Algorithm.Design.Manual.Springer-Verlag.1998

The.Algorithm.Design.Manual.Springer-Verlag.1998 The.Algorithm.Design.Manual.Springer-Verlag.1998

18.04.2013 Views

Priority Queues This arises, for example, in shortest path computations whenever we discover a shorter route to a vertex v than we had previously established. Thus v has a higher priority of being accessed next. Properly implemented and used, they lead to better performance on very large computations. Still, they are sufficiently complicated that you shouldn't mess with them unless you really know what you are doing. Implementations: LEDA (see Section ) provides a complete collection of priority queues in C++, including Fibonacci heaps, pairing heaps, Emde-Boas trees, and bounded height priority queues. Fibonacci heaps are their default implementation. SimPack/Sim++ is a library of routines for implementing discrete event simulations, built by Robert Cubert and Paul Fishwick, of the University of Florida. Priority queues are integral to such simulations, and Sim++ contains implementations of linked, binary, leftist, and calendar heaps [Bro88]. If you need a priority queue to control a simulation, check out http://www.cis.ufl.edu/ fishwick/simpack/simpack.html. An associated book [Fis95] describes model design using SimPack. Bare bones implementations in C and Pascal of the basic priority queue data structures appear in [GBY91]. Most notable is the inclusion of implementations of exotic priority queues such as P-trees and pagodas. See Section for further details. XTango (see Section ) is an algorithm animation system for UNIX and X-windows, that includes animations of such advanced priority queue data structures as binomial and Fibonacci heaps, as well as a spiffy animation of heapsort. Many textbooks provide implementations of simple priority queues, including [MS91] (see Section ). Algorithm 561 [Kah80] of the Collected Algorithms of the ACM is a Fortran implementation of a heap (see Section ). Notes: Good expositions on efficient heap construction algorithms include [Baa88, Ben86, CLR90, Man89, MT90b]. See [GBY91] for a description of several exotic priority queues. Empirical comparisons between priority queue data structures include [Jon86]. Bounded height priority queues are useful data structures in practice, but they do not have good worstcase performance bounds when arbitrary insertions and deletions are permitted. However, von Emde Boas priority queues [vEBKZ77] support insertion, deletion, search, max, and min operations where each key is an element from 1 to n. file:///E|/BOOK/BOOK3/NODE130.HTM (3 of 4) [19/1/2003 1:30:05]

Priority Queues Fibonacci heaps [FT87] support insert and decrease-key operations in O(1) amortized time, with amortized time extract-min and delete operations. The constant-time decrease-key operation leads to faster implementations of classical algorithms for shortest-paths, weighted bipartite-matching, and minimum-spanning-tree. In practice, Fibonacci heaps are nontrivial to implement and have large constant factors associated with them. However, pairing heaps have been proposed to realize the same bounds with less overhead. Experiments with pairing heaps are reported in [SV87]. Heaps define a partial order that can be built using a linear number of comparisons. The familiar lineartime merging algorithm for heap construction is due to Floyd [Flo64]. In the worst case, 1.625n comparisons suffice [GM86] and comparisons are necessary [CC92]. Related Problems: Dictionaries (see page ), sorting (see page ), shortest path (see page ). Next: Suffix Trees and Arrays Up: Data Structures Previous: Dictionaries Algorithms Mon Jun 2 23:33:50 EDT 1997 file:///E|/BOOK/BOOK3/NODE130.HTM (4 of 4) [19/1/2003 1:30:05]

Priority Queues<br />

This arises, for example, in shortest path computations whenever we discover a shorter route to a<br />

vertex v than we had previously established. Thus v has a higher priority of being accessed next.<br />

Properly implemented and used, they lead to better performance on very large computations. Still,<br />

they are sufficiently complicated that you shouldn't mess with them unless you really know what<br />

you are doing.<br />

Implementations: LEDA (see Section ) provides a complete collection of priority queues in C++,<br />

including Fibonacci heaps, pairing heaps, Emde-Boas trees, and bounded height priority queues.<br />

Fibonacci heaps are their default implementation.<br />

SimPack/Sim++ is a library of routines for implementing discrete event simulations, built by Robert<br />

Cubert and Paul Fishwick, of the University of Florida. Priority queues are integral to such<br />

simulations, and Sim++ contains implementations of linked, binary, leftist, and calendar heaps [Bro88].<br />

If you need a priority queue to control a simulation, check out http://www.cis.ufl.edu/<br />

fishwick/simpack/simpack.html. An associated book [Fis95] describes model design using SimPack.<br />

Bare bones implementations in C and Pascal of the basic priority queue data structures appear in<br />

[GBY91]. Most notable is the inclusion of implementations of exotic priority queues such as P-trees and<br />

pagodas. See Section for further details.<br />

XTango (see Section ) is an algorithm animation system for UNIX and X-windows, that includes<br />

animations of such advanced priority queue data structures as binomial and Fibonacci heaps, as well as a<br />

spiffy animation of heapsort.<br />

Many textbooks provide implementations of simple priority queues, including [MS91] (see Section ).<br />

<strong>Algorithm</strong> 561 [Kah80] of the Collected <strong>Algorithm</strong>s of the ACM is a Fortran implementation of a heap<br />

(see Section ).<br />

Notes: Good expositions on efficient heap construction algorithms include [Baa88, Ben86, CLR90,<br />

Man89, MT90b]. See [GBY91] for a description of several exotic priority queues. Empirical<br />

comparisons between priority queue data structures include [Jon86].<br />

Bounded height priority queues are useful data structures in practice, but they do not have good worstcase<br />

performance bounds when arbitrary insertions and deletions are permitted. However, von Emde<br />

Boas priority queues [vEBKZ77] support insertion, deletion, search, max, and min operations<br />

where each key is an element from 1 to n.<br />

file:///E|/BOOK/BOOK3/NODE130.HTM (3 of 4) [19/1/2003 1:30:05]

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!