This commit is contained in:
krahets
2023-08-29 20:57:37 +08:00
parent cf0d4b32ec
commit d387d9d41d
29 changed files with 85 additions and 58 deletions

View File

@ -656,7 +656,7 @@
### 堆顶元素出堆
堆顶元素是二叉树的根节点,即列表首元素。如果我们直接从列表中删除首元素,那么二叉树中所有节点的索引都会发生变化,这将使得后续使用堆化修复变得困难。为了尽量减少元素索引的变动,我们采以下操作步骤。
堆顶元素是二叉树的根节点,即列表首元素。如果我们直接从列表中删除首元素,那么二叉树中所有节点的索引都会发生变化,这将使得后续使用堆化修复变得困难。为了尽量减少元素索引的变动,我们采以下操作步骤。
1. 交换堆顶元素与堆底元素(即交换根节点与最右叶节点)。
2. 交换完成后,将堆底从列表中删除(注意,由于已经交换,实际上删除的是原来的堆顶元素)。

View File

@ -1,5 +1,7 @@
# 小结
### 重点回顾
- 堆是一棵完全二叉树,根据成立条件可分为大顶堆和小顶堆。大(小)顶堆的堆顶元素是最大(小)的。
- 优先队列的定义是具有出队优先级的队列,通常使用堆来实现。
- 堆的常用操作及其对应的时间复杂度包括:元素入堆 $O(\log n)$、堆顶元素出堆 $O(\log n)$ 和访问堆顶元素 $O(1)$ 等。
@ -8,7 +10,7 @@
- 输入 $n$ 个元素并建堆的时间复杂度可以优化至 $O(n)$ ,非常高效。
- Top-K 是一个经典算法问题,可以使用堆数据结构高效解决,时间复杂度为 $O(n \log k)$ 。
## Q & A
### Q & A
!!! question "数据结构的“堆”与内存管理的“堆”是同一个概念吗?"

View File

@ -16,7 +16,7 @@
!!! tip
当 $k = n$ 时,我们可以得到从大到小的序列,等价于“选择排序”算法。
当 $k = n$ 时,我们可以得到完整的有序序列,此时等价于“选择排序”算法。
## 方法二:排序