heap doesn't appear to work as described
Terry Reedy
tjreedy at udel.edu
Wed Apr 4 00:30:03 EDT 2007
<skip at pobox.com> wrote in message
news:17938.58082.317522.331513 at montanaro.dyndns.org...
|
| >> My book says that in a heap, a value at position i will be smaller
| >> than the values at positions 2*i and 2*i + 1.
I am sure your book either uses 1-based arrays or a 0-based arrays with the
first not used. The need to keep these alternatives in mind is an
unfortunate fact of programming life.
| Check the heapq docs for the constraints the Python heapq module
maintains:
|
| http://docs.python.org/dev/lib/module-heapq.html
|
| They are different than what you stated above:
|
| Heaps are arrays for which heap[k] <= heap[2*k+1] and heap[k] <=
| heap[2*k+2] for all k, counting elements from zero.
If you shift indexes down and substitute i = k+1, then i, 2*i, 2*i+1 are
transformed to (k+1)-1, 2*(k+1)-1, 2*(k+1)+1-1 == k, 2*k+1, 2*(k+1). So
the Python invariant is the same thing in different 'coordinates'.
In the first case h1 is smaller than h2,h3; h2 smaller than h4,h5; etc.
In the second, h0 is smaller than h1,h2; h1 smaller than h3,h4, etc.
Terry Jan Reedy
More information about the Python-list
mailing list