【数据结构】堆

因为的逻辑结构与完全二叉树的逻辑结构一模一样,所以可以说「堆」是一种满足特定条件的完全二叉树


主要可分为以下两种类型

「大顶堆」任意节点的值 ≥ 其子节点的值 的完全二叉树。

「小顶堆」任意节点的值 ≤ 其子节点的值 的完全二叉树。

 我们将二叉树的根节点称为“堆顶”,将底层最靠右的节点称为“堆底”

对于大顶堆(小顶堆),堆顶元素的值分别是最大(最小)的


 三

  

   方法名                                   描述时间复杂度
   push(x)                             元素入堆   𝑂(log 𝑛)
   pop()                         堆顶元素出堆   𝑂(log 𝑛)
   top()                         访问堆顶元素      𝑂(1)
   size()                     获取堆的元素数量      𝑂(1)
  empty()                       判断堆是否为空      𝑂(1)

四 

因为 完全二叉树非常适合用数组来表示 并且 堆正是一种完全二叉树所以可以使用数组来实现堆

 


堆常见应用

优先队列:堆通常作为实现优先队列的首选数据结构,其入队和出队操作的时间复杂度均为 𝑂(log 𝑛) ,而建队操作为 𝑂(𝑛) ,这些操作都非常高效。

堆排序:给定一组数据,我们可以用它们建立一个堆,然后不断地执行元素出堆操作,从而得到有序数据。然而,我们通常会使用一种更优雅的方式实现堆排序,详见后续的堆排序章节。

获取最大的 𝑘 个元素:这是一个经典的算法问题,同时也是一种典型应用,例如选择热度前 10 的新闻 作为微博热搜,选取销量前 10 的商品等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

古葬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值