堆知识点总结

本文详细介绍了堆的定义,包括最小堆的概念。接着讲解了堆的构造过程,特别是通过向下调整算法FilterDown来构建堆。同时阐述了如何在堆中插入和删除元素,以及这些操作的时间复杂度分析。堆的插入使用FilterUp方法调整,删除后通过FilterDown方法保持堆性质。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

堆的定义

设有n个数据元素的关键字为(k0, k1, …, kn-1),如果他们满足以下的关系:ki <= k2i+1且ki <= k2i+2(或者ki >= k2i+1且ki >= k2i+2)(i=0, 1, …, 向下取整((n-2)/2)),则称为堆(heap)。如果将此数据元素序列用一维数组存储,并将此数组对应一棵完全二叉树,则堆的含义可以理解为:在完全二叉树中任何非叶子节点的关键字均不大于(或不小于)其左、右孩子节点的关键字。

堆顶如果是最小的数,那么这个是最小堆,如果是最大的数,那么是最大堆。
下面以最小堆为例说明。

堆的构造(根据数组元素)

向下调整算法FilterDown

采用自下而上的方法把序列逐步调整形成堆。需要调用向下调整算法FilterDown,它将以分支节点i为根的子树调整为堆,当然在调整之前,节点i的左右子树已经是最小堆。
该算法的基本思想是:
先比较节点i左孩子节点和右孩子节点的关键字大小(如果存在左右孩子)。
如果节点i左孩子节点的关键字小于右孩子节点的关键字,则沿节点i的左分支进行调整,否则沿节点i的右分支进行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值