mirror of
https://github.com/krahets/hello-algo.git
synced 2025-12-19 07:17:54 +08:00
Reconstruct the chapter of the tree.
This commit is contained in:
@@ -2,15 +2,13 @@
|
||||
|
||||
如果我们想要根据输入列表生成一个堆,这个过程被称为「建堆」。
|
||||
|
||||
## 两种建堆方法
|
||||
|
||||
### 借助入堆方法实现
|
||||
## 借助入堆方法实现
|
||||
|
||||
最直接的方法是借助“元素入堆操作”实现,首先创建一个空堆,然后将列表元素依次添加到堆中。
|
||||
|
||||
设元素数量为 $n$ ,则最后一个元素入堆的时间复杂度为 $O(\log n)$ 。在依次添加元素时,堆的平均长度为 $\frac{n}{2}$ ,因此该方法的总体时间复杂度为 $O(n \log n)$ 。
|
||||
|
||||
### 基于堆化操作实现
|
||||
## 基于堆化操作实现
|
||||
|
||||
有趣的是,存在一种更高效的建堆方法,其时间复杂度仅为 $O(n)$ 。我们先将列表所有元素原封不动添加到堆中,**然后迭代地对各个节点执行“从顶至底堆化”**。当然,**我们不需要对叶节点执行堆化操作**,因为它们没有子节点。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user