小根堆建堆关键字之间的比较次数

有题目:

已知小根堆为8,15,10,21,34,16,12,删除关键字8之后需要建堆,在此过程中,关键字之间的比较次数是(        )。

A.1        B.2        C.3        D.4

 我们需要了解什么是小根堆:

  1. 了解小根堆前,先要了解什么是堆?

      1. 是一种经过排序的完全二叉树,其中任一非终端节点的数据值均不大于(或不小于)其左子节点和右子节点的值。

  2. 小根堆

    1. 小根堆又叫最小堆、小顶堆,是二叉堆的形式之一。

    2. 每个节点的值都小于其左孩子和右孩子的值。其中,小根堆的根节点的值是整个堆中最小的,如下图:  

    3. 常用于解决一些与优先级相关的问题,比如:

      1. 找到最小的K个元素

      2. 实现优先级队列

    4. 在插入和删除元素时具有较高的效率。

    5. 常见操作
      1. 插入元素
        1. 将新元素放在堆的最后
        2. 通过上浮操作将其调整到合适的位置
      2. 删除堆顶元素
        1. 将堆顶元素与最后一个元素交换
        2. 将堆的大小减一
        3. 通过下沉操作将堆顶元素调整到合适的位置
      3. 获取堆顶元素
  3. 大根堆

    1. 大根堆又叫最大堆、大顶堆,是二叉堆的形式之一。

    2. 每个节点的值都大于其左孩子和右孩子的值。其中,大根堆的根节点的值是整个堆中最大的,如下图: 

回到题目:

已知小根堆为8,15,10,21,34,16,12,删除关键字8之后需要建堆,在此过程中,关键字之间的比较次数是(        )。

A.1        B.2        C.3        D.4

  1. 根据题目所讲,建立初始堆:
  2. 然后根据上面讲到的【删除堆顶元素的建堆操作】,总共3步:
    1. 将堆顶元素与最后一个元素交换
    2. 将堆的大小减一
    3. 通过下沉操作将堆顶元素调整到合适的位置
  3. 所以,
    1. 先将堆顶元素与最后一个元素交换:
    2. 然后将堆的大小减一,即删除8:
    3. 最后通过下沉操作将堆顶元素调整到合适的位置:
      1. 先设比较次数 j=0
      2. 将12与15进行比较,j+1=1,12比15小,不下沉,保持原样
      3. 将12与10进行比较,j+1=2,12比10大,执行下沉,12与10互换位置
      4. 下沉后,12再与16比较,j+1=3,12比16小,不下沉,保持原样
      5. 故结果为:
      6. 故比较次数为 j=3,总共3次,选C

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ZYT_庄彦涛

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

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

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

打赏作者

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

抵扣说明:

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

余额充值