Published on *Computer Science Department at Princeton University* (http://www.cs.princeton.edu)

We investigate efficient implementations of Dijkstra's shortest path algorithm. We propose a new data structure, called the redistributive heap, for use in this algorithm. On a network with n vertices, m edges, and nonnegative integer arc costs bounded by C, a one-level form of redistributive heap gives a

time bound for Dijkstra's algorithm of O(m + n log C). A two-level form of redistributive heap gives a bound of O(m+n log C/log log C). A combination of a redistributive heap and a previously known data structure called a Fibonacci heap gives a bound of O(m+n sqrtlog C). The best previously known bounds

are O(m+n log n) using Fibonacci heaps alone and O(m log log C) using the priority queue structure of Van Emde Boas, Kaas and Zijlstra.