本文档详细概述了此 Java 存储库中提供的堆数据结构实现。堆是满足堆属性的特化树状数据结构,通常用于优先队列操作、堆排序和图算法。
堆是满足特定排序属性的完全二叉树。存在两种主要变体:
| 操作 | 时间复杂度 | 描述 |
|---|---|---|
| 插入 | O(log n) | 向堆中添加新元素 |
| 删除 | O(log n) | 删除特定位置的元素 |
| 提取最小值/最大值 | O(log n) | 删除并返回最小值/最大值元素 |
| 获取最小值/最大值 | O(1) | 检索最小值/最大值元素而不删除它 |
| 堆化 | O(n) | 将无序数组转换为堆 |
来源:src/main/java/com/thealgorithms/datastructures/heaps/MinHeap.java src/main/java/com/thealgorithms/datastructures/heaps/MaxHeap.java
该存储库定义了一个通用的 Heap 接口,该接口标准化了各种堆实现的基本操作。
来源:src/main/java/com/thealgorithms/datastructures/heaps/Heap.java
该 HeapElement 类表示堆中存储的元素,并为比较和排序元素提供了基础。
该类提供:
来源:src/main/java/com/thealgorithms/datastructures/heaps/HeapElement.java
MinHeap 实现了一个二叉堆,其中每个父节点的键都小于或等于其子节点的键,确保最小值始终位于根节点。
ArrayList<HeapElement> 进行存储。heapifyDown、toggleUp 和 toggleDown 等辅助方法。Heap 接口。来源:src/main/java/com/thealgorithms/datastructures/heaps/MinHeap.java
MaxHeap 实现了一个二叉堆,其中每个父节点的键都大于或等于其子节点的键,确保最大值始终位于根节点。
ArrayList<HeapElement> 进行存储。Heap 接口。来源:src/main/java/com/thealgorithms/datastructures/heaps/MaxHeap.java
GenericHeap 是一个类型安全的实现,它可以使用任何 Comparable 类型工作,默认作为最大堆。
Comparable 的类型配合使用。ArrayList<T> 作为主要堆存储。HashMap<T, Integer> 来跟踪元素位置。来源:src/main/java/com/thealgorithms/datastructures/heaps/GenericHeap.java
FibonacciHeap 是一种高级堆实现,它为多个操作提供了更优越的理论时间复杂度。
HeapNode。来源:src/main/java/com/thealgorithms/datastructures/heaps/FibonacciHeap.java
MinPriorityQueue 是一种专用数据结构,它维护最小堆属性,其中最小元素具有最高优先级。
来源:src/main/java/com/thealgorithms/datastructures/heaps/MinPriorityQueue.java
插入过程包括:
来源:src/main/java/com/thealgorithms/datastructures/heaps/MinHeap.java210-217 src/main/java/com/thealgorithms/datastructures/heaps/MaxHeap.java187-194
删除过程包括:
来源:src/main/java/com/thealgorithms/datastructures/heaps/MinHeap.java222-244 src/main/java/com/thealgorithms/datastructures/heaps/MaxHeap.java199-221
此操作:
来源:src/main/java/com/thealgorithms/datastructures/heaps/MinHeap.java198-205 src/main/java/com/thealgorithms/datastructures/heaps/MaxHeap.java175-182
当尝试在空堆上执行操作时抛出的自定义异常。
来源:src/main/java/com/thealgorithms/datastructures/heaps/EmptyHeapException.java
本存储库中的堆实现用于:
有关使用这些堆的特定算法的信息,请参阅 搜索和排序。
| 堆类型 | 最佳使用场景 | 插入 | 提取最小值/最大值 | 减少键 (Decrease Key) | 合并 (Meld) |
|---|---|---|---|---|---|
| MinHeap/MaxHeap | 简单的优先队列。 | O(log n) | O(log n) | O(log n) | O(n) |
| GenericHeap | 类型安全的⭑操作。 | O(log n) | O(log n) | O(log n) | 不适用 |
| FibonacciHeap | 频繁插入和减少键。 | O(1)* | O(log n)* | O(1)* | O(1) |
| MinPriorityQueue | 固定容量的应用。 | O(log n) | O(log n) | 不适用 | 不适用 |
*摊销时间复杂度。
来源:src/main/java/com/thealgorithms/datastructures/heaps/MinHeap.java src/main/java/com/thealgorithms/datastructures/heaps/MaxHeap.java src/main/java/com/thealgorithms/datastructures/heaps/GenericHeap.java src/main/java/com/thealgorithms/datastructures/heaps/FibonacciHeap.java src/main/java/com/thealgorithms/datastructures/heaps/MinPriorityQueue.java
刷新此 Wiki
最后索引时间2025 年 4 月 18 日(ad5e49)