一個序列 如果對於
滿足
,則它形成一個(二叉)堆,其中
是向下取整函式,這等價於對於
,
和
。因此,第一個元素必須是最小的。堆可以被看作是一個帶標籤的二叉樹,其中第 i 個節點的標籤小於其任何後代節點的標籤(Skiena 1990, p. 35)。堆支援任意插入和在每次更新中以
時間查詢/刪除最小值 (Skiena 1990, p. 38)。
一個列表可以使用 Floyd (1964) 的演算法在 時間內轉換為堆。例如,給定隨機排列
,Floyd 演算法給出堆
(左圖)。右圖顯示了一個包含 30 個元素的堆。
| 堆 | |
| 1 | |
| 2 | |
| 3 | |
| 4 |
在 , 2, ... 個元素上的堆的數量
是 1, 1, 2, 3, 8, 20, 80, 210, 896, 3360, ... (OEIS A056971),其中前幾個在上面的表格中進行了總結。
的公式由下式給出
|
(1)
|
其中 ,
,並且
|
(2)
| |||
|
(3)
| |||
|
(4)
| |||
|
(5)
| |||
|
(6)
|
層堆的數量(或等效地,
個元素的堆的數量)由遞推關係給出
|
(7)
|
其中 (Skiena 1990, p. 36)。這可以寫成乘積形式為
|
(8)
|
其對於 , 2, ... 的值是 1, 2, 80, 21964800, 74836825861835980800000, ... (OEIS A056972)。