Reconstruct the chapter of the tree.

This commit is contained in:
krahets
2023-04-17 21:01:06 +08:00
parent 881d573790
commit 1d6b7a5644
4 changed files with 126 additions and 108 deletions

View File

@@ -2,15 +2,13 @@
如果我们想要根据输入列表生成一个堆,这个过程被称为「建堆」。
## 两种建堆方法
### 借助入堆方法实现
## 借助入堆方法实现
最直接的方法是借助“元素入堆操作”实现,首先创建一个空堆,然后将列表元素依次添加到堆中。
设元素数量为 $n$ ,则最后一个元素入堆的时间复杂度为 $O(\log n)$ 。在依次添加元素时,堆的平均长度为 $\frac{n}{2}$ ,因此该方法的总体时间复杂度为 $O(n \log n)$ 。
### 基于堆化操作实现
## 基于堆化操作实现
有趣的是,存在一种更高效的建堆方法,其时间复杂度仅为 $O(n)$ 。我们先将列表所有元素原封不动添加到堆中,**然后迭代地对各个节点执行“从顶至底堆化”**。当然,**我们不需要对叶节点执行堆化操作**,因为它们没有子节点。