mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 14:18:20 +08:00 
			
		
		
		
	Remove heap.md for temporary.
This commit is contained in:
		@ -1,54 +0,0 @@
 | 
			
		||||
# 堆
 | 
			
		||||
 | 
			
		||||
「堆 Heap」是一种特殊的树状数据结构,并且是一颗「完全二叉树」。堆主要分为两种:
 | 
			
		||||
 | 
			
		||||
- 「大顶堆 Max Heap」,任意结点的值 $\geq$ 其子结点的值,因此根结点的值最大;
 | 
			
		||||
- 「小顶堆 Min Heap」,任意结点的值 $\leq$ 其子结点的值,因此根结点的值最小;
 | 
			
		||||
 | 
			
		||||
(图)
 | 
			
		||||
 | 
			
		||||
!!! tip ""
 | 
			
		||||
 | 
			
		||||
    大顶堆和小顶堆的定义、性质、操作本质上是相同的,区别只是大顶堆在求最大值,小顶堆在求最小值。
 | 
			
		||||
 | 
			
		||||
## 堆常用操作
 | 
			
		||||
 | 
			
		||||
值得说明的是,多数编程语言提供的是「优先队列 Priority Queue」,其是一种抽象数据结构,**定义为具有出队优先级的队列**。
 | 
			
		||||
 | 
			
		||||
而恰好,堆的定义与优先队列的操作逻辑完全吻合,大顶堆就是一个元素从大到小出队的优先队列。从使用角度看,我们可以将「优先队列」和「堆」理解为等价的数据结构,下文将统一使用 “堆” 这个名称。
 | 
			
		||||
 | 
			
		||||
堆的常用操作见下表(方法命名以 Java 为例)。
 | 
			
		||||
 | 
			
		||||
<p align="center"> Table. 堆的常用操作 </p>
 | 
			
		||||
 | 
			
		||||
<div class="center-table" markdown>
 | 
			
		||||
 | 
			
		||||
| 方法      | 描述                                         |
 | 
			
		||||
| --------- | -------------------------------------------- |
 | 
			
		||||
| add()     | 元素入堆                                     |
 | 
			
		||||
| poll()    | 堆顶元素出堆                                 |
 | 
			
		||||
| peek()    | 访问堆顶元素(大 / 小顶堆分别为最大 / 小值) |
 | 
			
		||||
| size()    | 获取堆的元素数量                             |
 | 
			
		||||
| isEmpty() | 判断堆是否为空                               |
 | 
			
		||||
 | 
			
		||||
</div>
 | 
			
		||||
 | 
			
		||||
```java
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## 堆的实现
 | 
			
		||||
 | 
			
		||||
!!! tip
 | 
			
		||||
 | 
			
		||||
    下文使用「大顶堆」来举例,「小顶堆」的用法与实现可以简单地将所有 $>$ ($<$) 替换为 $<$ ($>$) 即可。
 | 
			
		||||
 | 
			
		||||
我们一般使用「数组」来存储「堆」,这是因为完全二叉树非常适合用数组来表示(在二叉树章节有详细解释)。
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## 堆常见应用
 | 
			
		||||
 | 
			
		||||
- 优先队列。
 | 
			
		||||
- 堆排序。
 | 
			
		||||
- 获取数据 Top K 大(小)元素。
 | 
			
		||||
		Reference in New Issue
	
	Block a user