#堆 (数据结构)
堆(英语:Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。
##逻辑定义
n个元素序列{k1,k2...ki...kn},当且仅当满足下列关系时称之为堆:<br>
> $(k_i <= k_{2i},k_i <= k_{2i+1})或者(k_i >= k_{2i},k_i >= k_{2i+1}), (i = 1,2,3,4,...,n/2)$
##性质
堆的实现通过构造二叉堆(binary heap),实为二叉树的一种;由于其应用的普遍性,当不加限定时,均指该数据结构的这种实现。这种数据结构具有以下性质。<br>
任意节点小于(或大于)它的所有后裔,最小元(或最大元)在堆的根上(堆序性)。
堆总是一棵完全树。即除了最底层,其他层的节点都被元素填满,且最底层尽可能地从左到右填入。
将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。
##API介绍
堆数据结构,如果数数元素是可以比较的,就不需要传入比较器对象,如果数据是可以比较的就要传入比较器,根据传入的比较器,可以实现大顶堆和小顶堆。
| 方法名 | 作用 | 时间复杂度 |
| :-------- | :-------- | :--: |
| Heap() | 无参构造函数 | - |
| Heap(T t) | 构造函数 | - |
| Heap(T t, Comparator< T > comparator) | 构造函数 | - |
| Heap(Comparator< T > comparator) | 构造函数 | - |
| Heap(Collection< T > coll) | 构造函数 | - |
| Heap(Collection< T > coll, Comparator< T > comparator) | 构造函数 | - |
| Comparator< T > getComparator() | 获取比较器对象 | - |
| setComparator(Comparator< T > comparator) | 设置比较器对象 | - |
| shiftUp(int idx) | 向上调整堆 | O(log(n)) |
| shiftDown(int idx) | 向下调整堆 | O(log(n)) |
| int compare(Object o1, Object o2) | 比较两个数的大小 | - |
| add(T item) | 添加一个元素 | O(log(n)) |
| add(T[] arr) | 添加一组元素 | O(n*log(n)) |
| add(Collection< T > coll) | 添加一组元素 | O(n*log(n)) |
| T getTop() | 获取堆顶元素,但不删除 | O(1) |
| T deleteTop() | 删除堆顶结点 | O(log(n)) |
| int size() | 获取堆的大小 | O(1) |
| boolean isEmpty() | 判断堆是否为空 | O(1) |
| clear() | 清空堆,如果有比较器,不会删除比较器 | - |
| delete() | 删除元素,并且清空比较器对象 | - |
| List< T > getData() | 获取堆中所有的数据 | - |
| toString() | 堆信息描述 | - |
没有合适的资源?快使用搜索试试~ 我知道了~
数据结构(英语:data structure)是计算机中存储、组织数据的方式。正确的数据结构选择可以提高算法的效率.zip
共25个文件
class:7个
java:7个
xml:6个
需积分: 2 0 下载量 53 浏览量
2024-01-14
12:42:48
上传
评论
收藏 24KB ZIP 举报
温馨提示
算法与数据结构它们分别涵盖了以下主要内容: 数据结构(Data Structures): 逻辑结构:描述数据元素之间的逻辑关系,如线性结构(如数组、链表)、树形结构(如二叉树、堆、B树)、图结构(有向图、无向图等)以及集合和队列等抽象数据类型。 存储结构(物理结构):描述数据在计算机中如何具体存储。例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和空间复杂度。 算法: 算法设计:研究如何将解决问题的步骤形式化为一系列指令,使得计算机可以执行以求解问题。 算法特性:包括输入、输出、有穷性、确定性和可行性。即一个有效的算法必须能在有限步骤内结束,并且对于给定的输入产生唯一的确定输出。 算法分类:排序算法(如冒泡排序、快速排序、归并排序),查找算法(如顺序查找、二分查找、哈希查找),图论算法(如Dijkstra最短路径算法、Floyd-Warshall算法、Prim最小生成树算法),动态规划,贪心算法,回溯法,分支限界法等。 算法分析:通过数学方法分析算法的时间复杂度(运行时间随数据规模增长的速度)和空间复杂度(所需内存大小)来评估其效率。 学习算法与数据结构不仅有助于理解程序的内部工作原理,更能帮助开发人员编写出高效、稳定和易于维护的软件系统。
资源推荐
资源详情
资源评论
收起资源包目录
数据结构(英语:data structure)是计算机中存储、组织数据的方式。正确的数据结构选择可以提高算法的效率.zip (25个子文件)
open_suanfayushujujiegouxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxcxxxxxxxxxxxxcxvcvcv
003-一致性Hash
003-一致性Hash.iml 446B
src
wjc
datastruct
HashFunction.java 298B
ConsistentHash.java 2KB
out
production
001-堆结构
com
datastruct
Heap.class 6KB
test
001-堆结构
com
datastruct
HeapTest.class 3KB
HeapTest$3.class 1004B
HeapTest$4.class 1013B
Node.class 822B
HeapTest$2.class 1013B
HeapTest$1.class 1004B
readme.md 400B
.idea
vcs.xml 180B
misc.xml 363B
compiler.xml 686B
modules.xml 580B
encodings.xml 159B
copyright
profiles_settings.xml 74B
002-SkipList
src
wjc
datastruct
SkipListEntry.java 681B
SkipList.java 4KB
002-SkipList.iml 446B
001-堆结构
001-堆结构.iml 848B
src
wjc
datastruct
Heap.java 9KB
readme.md 3KB
test
wjc
datastruct
Node.java 527B
HeapTest.java 3KB
共 25 条
- 1
资源评论
极致人生-010
- 粉丝: 2925
- 资源: 2826
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Flume进阶-自定义拦截器jar包
- Dubins曲线算法讲解和在运动规划中的使用.pdf
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.dta
- 上市公司-股票性质数据-工具变量(民企、国企、央企)2003-2022年.xlsx
- Reeds+Shepp曲线算法讲解和实现.pdf
- 毕业设计基于SpringBoot+MyBatisPlus+MySQL+Vue的外卖配送信息系统源代码+数据库
- 词向量(Word Embeddings)是自然语言处理(NLP)领域的一种重要技术.txt
- Surfer,线性函数
- MyBatis 的动态 SQL 是其核心特性之一.txt
- 时代的sdddsddsddsd
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功