mirror of
https://github.com/krahets/hello-algo.git
synced 2026-05-04 05:12:40 +08:00
build
This commit is contained in:
@@ -4,7 +4,7 @@ comments: true
|
||||
|
||||
# 8.2 建堆操作
|
||||
|
||||
在某些情况下,我们希望使用一个列表的所有元素来构建一个堆,这个过程被称为「建堆」。
|
||||
在某些情况下,我们希望使用一个列表的所有元素来构建一个堆,这个过程被称为“建堆操作”。
|
||||
|
||||
## 8.2.1 借助入堆方法实现
|
||||
|
||||
|
||||
@@ -4,10 +4,10 @@ comments: true
|
||||
|
||||
# 8.1 堆
|
||||
|
||||
「堆 Heap」是一种满足特定条件的完全二叉树,可分为两种类型:
|
||||
「堆 heap」是一种满足特定条件的完全二叉树,可分为两种类型:
|
||||
|
||||
- 「大顶堆 Max Heap」,任意节点的值 $\geq$ 其子节点的值。
|
||||
- 「小顶堆 Min Heap」,任意节点的值 $\leq$ 其子节点的值。
|
||||
- 「大顶堆 max heap」:任意节点的值 $\geq$ 其子节点的值。
|
||||
- 「小顶堆 min heap」:任意节点的值 $\leq$ 其子节点的值。
|
||||
|
||||

|
||||
|
||||
@@ -16,16 +16,17 @@ comments: true
|
||||
堆作为完全二叉树的一个特例,具有以下特性:
|
||||
|
||||
- 最底层节点靠左填充,其他层的节点都被填满。
|
||||
- 我们将二叉树的根节点称为「堆顶」,将底层最靠右的节点称为「堆底」。
|
||||
- 我们将二叉树的根节点称为“堆顶”,将底层最靠右的节点称为“堆底”。
|
||||
- 对于大顶堆(小顶堆),堆顶元素(即根节点)的值分别是最大(最小)的。
|
||||
|
||||
## 8.1.1 堆常用操作
|
||||
|
||||
需要指出的是,许多编程语言提供的是「优先队列 Priority Queue」,这是一种抽象数据结构,定义为具有优先级排序的队列。
|
||||
需要指出的是,许多编程语言提供的是「优先队列 priority queue」,这是一种抽象数据结构,定义为具有优先级排序的队列。
|
||||
|
||||
实际上,**堆通常用作实现优先队列,大顶堆相当于元素按从大到小顺序出队的优先队列**。从使用角度来看,我们可以将「优先队列」和「堆」看作等价的数据结构。因此,本书对两者不做特别区分,统一使用「堆」来命名。
|
||||
实际上,**堆通常用作实现优先队列,大顶堆相当于元素按从大到小顺序出队的优先队列**。从使用角度来看,我们可以将“优先队列”和“堆”看作等价的数据结构。因此,本书对两者不做特别区分,统一使用“堆“来命名。
|
||||
|
||||
堆的常用操作见下表,方法名需要根据编程语言来确定。
|
||||
|
||||
<p align="center"> 表:堆的操作效率 </p>
|
||||
|
||||
<div class="center-table" markdown>
|
||||
@@ -678,7 +679,7 @@ comments: true
|
||||
|
||||
### 3. 元素入堆
|
||||
|
||||
给定元素 `val` ,我们首先将其添加到堆底。添加之后,由于 val 可能大于堆中其他元素,堆的成立条件可能已被破坏。因此,**需要修复从插入节点到根节点的路径上的各个节点**,这个操作被称为「堆化 Heapify」。
|
||||
给定元素 `val` ,我们首先将其添加到堆底。添加之后,由于 val 可能大于堆中其他元素,堆的成立条件可能已被破坏。因此,**需要修复从插入节点到根节点的路径上的各个节点**,这个操作被称为「堆化 heapify」。
|
||||
|
||||
考虑从入堆节点开始,**从底至顶执行堆化**。具体来说,我们比较插入节点与其父节点的值,如果插入节点更大,则将它们交换。然后继续执行此操作,从底至顶修复堆中的各个节点,直至越过根节点或遇到无须交换的节点时结束。
|
||||
|
||||
|
||||
@@ -22,7 +22,7 @@ comments: true
|
||||
|
||||
!!! tip
|
||||
|
||||
当 $k = n$ 时,我们可以得到从大到小的序列,等价于「选择排序」算法。
|
||||
当 $k = n$ 时,我们可以得到从大到小的序列,等价于“选择排序”算法。
|
||||
|
||||
## 8.3.2 方法二:排序
|
||||
|
||||
|
||||
Reference in New Issue
Block a user