This commit is contained in:
krahets
2024-04-03 04:41:27 +08:00
parent 20f79f5f32
commit 8591529021
47 changed files with 136 additions and 135 deletions
+5 -5
View File
@@ -4,10 +4,10 @@ comments: true
# 8.1   堆
「堆 heap」是一种满足特定条件的完全二叉树,主要可分为两种类型,如图 8-1 所示。
<u>堆(heap</u>是一种满足特定条件的完全二叉树,主要可分为两种类型,如图 8-1 所示。
- 小顶堆 min heap:任意节点的值 $\leq$ 其子节点的值。
- 大顶堆 max heap:任意节点的值 $\geq$ 其子节点的值。
- <u>小顶堆min heap</u>:任意节点的值 $\leq$ 其子节点的值。
- <u>大顶堆max heap</u>:任意节点的值 $\geq$ 其子节点的值。
![小顶堆与大顶堆](heap.assets/min_heap_and_max_heap.png){ class="animation-figure" }
@@ -21,7 +21,7 @@ comments: true
## 8.1.1 &nbsp; 堆的常用操作
需要指出的是,许多编程语言提供的是优先队列 priority queue,这是一种抽象的数据结构,定义为具有优先级排序的队列。
需要指出的是,许多编程语言提供的是<u>优先队列priority queue</u>,这是一种抽象的数据结构,定义为具有优先级排序的队列。
实际上,**堆通常用于实现优先队列,大顶堆相当于元素按从大到小的顺序出队的优先队列**。从使用角度来看,我们可以将“优先队列”和“堆”看作等价的数据结构。因此,本书对两者不做特别区分,统一称作“堆”。
@@ -836,7 +836,7 @@ comments: true
### 3. &nbsp; 元素入堆
给定元素 `val` ,我们首先将其添加到堆底。添加之后,由于 `val` 可能大于堆中其他元素,堆的成立条件可能已被破坏,**因此需要修复从插入节点到根节点的路径上的各个节点**,这个操作被称为堆化 heapify
给定元素 `val` ,我们首先将其添加到堆底。添加之后,由于 `val` 可能大于堆中其他元素,堆的成立条件可能已被破坏,**因此需要修复从插入节点到根节点的路径上的各个节点**,这个操作被称为<u>堆化heapify</u>
考虑从入堆节点开始,**从底至顶执行堆化**。如图 8-3 所示,我们比较插入节点与其父节点的值,如果插入节点更大,则将它们交换。然后继续执行此操作,从底至顶修复堆中的各个节点,直至越过根节点或遇到无须交换的节点时结束。