Remove the heading numbers

in all the source docs.
This commit is contained in:
krahets
2023-02-16 03:39:01 +08:00
parent 15417d2a95
commit 88b00151b0
46 changed files with 257 additions and 172 deletions

View File

@@ -2,7 +2,7 @@
comments: true
---
# 8.1.
# 堆
「堆 Heap」是一棵限定条件下的「完全二叉树」。根据成立条件堆主要分为两种类型
@@ -11,13 +11,13 @@ comments: true
![min_heap_and_max_heap](heap.assets/min_heap_and_max_heap.png)
## 8.1.1. 堆术语与性质
## 堆术语与性质
- 由于堆是完全二叉树,因此最底层结点靠左填充,其它层结点皆被填满。
- 二叉树中的根结点对应「堆顶」,底层最靠右结点对应「堆底」。
- 对于大顶堆 / 小顶堆,其堆顶元素(即根结点)的值最大 / 最小。
## 8.1.2. 堆常用操作
## 堆常用操作
值得说明的是,多数编程语言提供的是「优先队列 Priority Queue」其是一种抽象数据结构**定义为具有出队优先级的队列**。
@@ -272,7 +272,7 @@ comments: true
```
## 8.1.3. 堆的实现
## 堆的实现
下文实现的是「大顶堆」,若想转换为「小顶堆」,将所有大小逻辑判断取逆(例如将 $\geq$ 替换为 $\leq$ )即可,有兴趣的同学可自行实现。
@@ -780,7 +780,7 @@ $$
进一步地,高度为 $h$ 的完美二叉树的结点数量为 $n = 2^{h+1} - 1$ ,易得复杂度为 $O(2^h) = O(n)$。以上推算表明,**输入列表并建堆的时间复杂度为 $O(n)$ ,非常高效**。
## 8.1.4. 堆常见应用
## 堆常见应用
- **优先队列**。堆常作为实现优先队列的首选数据结构,入队和出队操作时间复杂度为 $O(\log n)$ ,建队操作为 $O(n)$ ,皆非常高效。
- **堆排序**。给定一组数据,我们使用其建堆,并依次全部弹出,则可以得到有序的序列。当然,堆排序一般无需弹出元素,仅需每轮将堆顶元素交换至数组尾部并减小堆的长度即可。