- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
最小堆的插入与删除操作细则
一、最小堆的基本概念
最小堆是一种特殊的完全二叉树,其根节点是所有节点中最小的一个。最小堆具有以下关键特性:
(一)结构特性
1.完全二叉树:除了最后一层,其他层都是满的,且最后一层从左到右填充。
2.堆属性:任意节点的值不大于其子节点的值。
(二)堆操作特性
1.时间效率:插入和删除操作的时间复杂度为O(logn),其中n为堆中节点数。
2.空间效率:通常使用数组实现,空间复杂度为O(n)。
二、最小堆的插入操作
插入操作是指将一个新元素添加到最小堆中,并保持堆属性。具体步骤如下:
(一)插入位置确定
1.将新元素添加到数组的末尾,即完全二叉树的最后一个位置。
2.初始化新元素的位置索引为n(数组长度减1)。
(二)堆调整过程
1.比较:将新元素与其父节点进行比较。
(1)如果新元素小于父节点,交换两者位置。
(2)如果新元素大于或等于父节点,插入操作完成。
2.递归:重复上述比较和交换,直到新元素到达合适位置或成为根节点。
(三)示例步骤
假设初始堆为[5,9,6,11,14,8,7],插入元素3:
1.插入到末尾:[5,9,6,11,14,8,7,3]
2.比较3与7(父节点):37,交换:[5,9,6,11,14,8,3,7]
3.比较3与6(父节点):36,交换:[5,9,3,11,14,8,6,7]
4.比较3与9(父节点):39,交换:[5,3,9,11,14,8,6,7]
5.比较3与5(父节点):35,停止。最终堆为[3,5,9,11,14,8,6,7]。
三、最小堆的删除操作
删除操作通常指删除堆的根节点(最小元素),并重新构建堆。具体步骤如下:
(一)删除根节点
1.将堆的最后一个元素移动到根位置。
2.删除原最后一个元素。
(二)堆调整过程
1.初始化当前节点为根节点(索引0)。
2.比较:将当前节点与其子节点进行比较。
(1)找到较小的子节点(若存在)。
(2)如果当前节点大于该子节点,交换两者位置。
(3)更新当前节点为被交换的子节点索引。
3.递归:重复上述比较和交换,直到当前节点无法再调整或成为叶子节点。
(三)示例步骤
假设初始堆为[3,5,9,11,14,8,6,7],删除根节点:
1.将最后一个元素6移动到根位置:[6,5,9,11,14,8,7]
2.比较6与5、9:最小子节点为5(索引1)。
3.交换6与5:[5,6,9,11,14,8,7]
4.更新当前节点为索引1(原子节点)。
5.比较6与8、7:最小子节点为7(索引6)。
6.交换6与7:[5,6,9,11,14,8,7,7]
7.删除最后一个7。最终堆为[5,6,9,11,14,8,7]。
四、应用场景
最小堆适用于以下场景:
(一)优先队列:高效处理任务优先级。
(二)数据流处理:实时获取最小元素。
(三)图算法:如Dijkstra算法中的距离表维护。
五、注意事项
(一)边界条件处理
1.插入时检查数组扩容。
2.删除时避免空堆操作。
(二)性能优化
1.使用数组实现可避免动态内存分配开销。
2.堆调整过程中可缓存子节点索引以提高效率。
一、最小堆的基本概念
最小堆是一种特殊的完全二叉树,其根节点是所有节点中最小的一个。最小堆具有以下关键特性:
(一)结构特性
1.完全二叉树:除了最后一层,其他层都是满的,且最后一层从左到右填充。
-完全二叉树的性质保证了空间的高效利用,所有节点尽可能填满每一层,减少了空隙。
-在数组实现中,节点的索引关系固定:父节点索引为`i`的子节点索引为`2i+1`和`2i+2`,反之节点索引为`i`的父节点索引为`floor((i-1)/2)`。
2.堆属性:任意节点的值不大于其子节点的值。
-这一特性保证了堆的最小值始终在根节点,便于快速访问。
-堆属性是所有堆操作(插入、删除)的基础,任何操作都必须在保持这一属性的前提下进行。
(二)堆操作特性
1.时间效率:插入和删除操作的时间复杂度为O(logn),其中n为堆中节点数。
-对数时间复杂度源于完全二叉树的高度为`logn`,每次操作最多需要遍历树的高度。
-具体操作通过上浮(插入)和下沉(删除)过程实现,每次比较和交换最多进行`logn`次。
2.空间效率:通常使用数组实现,空间复杂度为O(n)。
-数组实现的优点是内存连续,访问速度快,且无需动态分配和释放内存。
-缺点是可能存在空间浪费,尤其是当堆未满时,但这是为了时间效率的
原创力文档


文档评论(0)