[Python-Dev] Priority queue (binary heap) python code

Oren Tirosh oren-py-d@hishome.net
Tue, 25 Jun 2002 02:52:03 -0400

On Mon, Jun 24, 2002 at 09:33:18PM -0400, Kevin O'Connor wrote:
> I often find myself needing priority queues in python, and I've finally
> broken down and written a simple implementation.  Previously I've used
> sorted lists (via bisect) to get the job done, but the heap code
> significantly improves performance.  There are C based implementations, but
> the effort of compiling in an extension often isn't worth the effort.  I'm
> including the code here for everyone's amusement.
> Any chance something like this could make it into the standard python
> library?  It would save a lot of time for lazy people like myself.  :-)

A sorted list is a much more general-purpose data structure than a priority
queue and can be used to implement a priority queue. It offers almost the same 
asymptotic performance:

sorted list using splay tree (amortized):
  insert: O(log n)
  pop: O(log n)
  peek: O(log n)

priority queue using binary heap:
  insert: O(log n)
  pop: O(log n)
  peek: O(1)

The only advantage of a heap is O(1) peek which doesn't seem so critical. 
It may also have somewhat better performance by a constant factor because
it uses an array rather than allocating node structures.  But the internal 
order of a heap-based priority queue is very non-intuitive and quite useless 
for other purposes while a sorted list is, umm..., sorted!