The implicit representation of a complete binary tree as an array,
or list, seems to have been first proposed by Eytzinger [27].
He used this representation in books containing pedigree family trees
of noble families.  The 
 data structure described here was
first introduced by Williams [76].
 data structure described here was
first introduced by Williams [76].
The randomized 
 data structure described here appears
to have first been proposed by Gambin and Malinowski [34].
Other meldable heap implementations exist, including 
leftist heaps [16,48, Section 5.3.2],
binomial heaps [73],
Fibonacci heaps [30], 
pairing heaps [29], and skew heaps [70], 
although none of these are as simple as the
 data structure described here appears
to have first been proposed by Gambin and Malinowski [34].
Other meldable heap implementations exist, including 
leftist heaps [16,48, Section 5.3.2],
binomial heaps [73],
Fibonacci heaps [30], 
pairing heaps [29], and skew heaps [70], 
although none of these are as simple as the 
 structure.
structure.
Some of the above structures also support a 
 operation
in which the value stored at node
 operation
in which the value stored at node 
 is decreased to
 is decreased to 
 .  (It is a
pre-condition that
.  (It is a
pre-condition that 
 .)  In most of the preceding structures,
this operation can be supported in
.)  In most of the preceding structures,
this operation can be supported in 
 time by removing node
 time by removing node
 and adding
 and adding  
 .  However, some of these structures can implement
.  However, some of these structures can implement
 more efficiently.  In particular,
 more efficiently.  In particular, 
 takes
takes  amortized time in Fibonacci heaps and
 amortized time in Fibonacci heaps and 
 amortized time in a special version of pairing heaps [25].
This more efficient
amortized time in a special version of pairing heaps [25].
This more efficient 
 operation has applications in
speeding up several graph algorithms, including Dijkstra's shortest path
algorithm [30].
 operation has applications in
speeding up several graph algorithms, including Dijkstra's shortest path
algorithm [30].
 shown at the end of Figure 10.2.
  shown at the end of Figure 10.2.
 shown at the end of Figure 10.3.
 shown at the end of Figure 10.3.
 method, that removes the value stored in
 method, that removes the value stored in
  
![$ \mathtt{a[i]}$](img4767.png) in a
 in a 
 .  This method should run in
.  This method should run in 
 time.
  Next, explain why this method is not likely to be useful.
 time.
  Next, explain why this method is not likely to be useful.
 -ary tree is a generalization of a binary tree in which each
  internal node has
-ary tree is a generalization of a binary tree in which each
  internal node has  children.  Using Eytzinger's method it is also
  possible to represent complete
 children.  Using Eytzinger's method it is also
  possible to represent complete  -ary trees using arrays.  Work out
  the equations that, given an index
-ary trees using arrays.  Work out
  the equations that, given an index 
 , determine the index of
, determine the index of 
 's
  parent and each of
's
  parent and each of 
 's
's  children in this representation.
 children in this representation.
 , the
, the  -ary generalization of a
-ary generalization of a
  
 . Analyze the running times of operations on a
. Analyze the running times of operations on a 
 and test the performance of your
  and test the performance of your 
 implementation against
  that of the
 implementation against
  that of the 
 implementation given here.
 implementation given here.
 
 
 shown in Figure 10.4.  Use a coin to
  simulate a random bit when needed.
 shown in Figure 10.4.  Use a coin to
  simulate a random bit when needed.
 
 
 shown in Figure 10.4.  Use a coin to
  simulate a random bit when needed.
 shown in Figure 10.4.  Use a coin to
  simulate a random bit when needed.
 method, that removes the node
 method, that removes the node 
 from
  a
 from
  a 
 .  This method should run in
.  This method should run in 
 expected time.
 expected time.
 or
 or
  
 in constant time.
 in constant time.
 th smallest value in a
th smallest value in a 
 or
 or
  
 in
 in 
 time.  (Hint: Using another heap
  might help.)
 time.  (Hint: Using another heap
  might help.)
 sorted lists, of total length
 sorted lists, of total length 
 .  Using
  a heap, show how to merge these into a single sorted list in
.  Using
  a heap, show how to merge these into a single sorted list in 
 time.  (Hint: Starting with the case
 time.  (Hint: Starting with the case  can be instructive.)
 can be instructive.)opendatastructures.org