Python中的大根堆

本文介绍了大根堆的概念,表示方式以及大根堆的主要操作,包括getMax、extractMax和insert。提供了大根堆的数组实现示例,并讨论了如何使用Python的heapq库实现大根堆。
摘要由CSDN通过智能技术生成

什么是大根堆

大根堆是一种完全二叉树,每个内部结点的值都大于或等于子结点的值,将堆的元素映射到数组中很简单:如果一个结点的下标是k,则其左孩子的下标为2k+1,右孩子的下标为2k+2。

大根堆的表示

可以将大根堆表示为数组,根结点为Arr[0]。对于一个下标为i的结点,即Arr[i],则Arr[(i-1)/2]为其父节点,Arr[(2*i)+1]返回左孩子结点,Arr(2*i)+2]返回右孩子结点。

大根堆的操作

1. getMax(): 返回大根堆的根结点,时间复杂度为O(1)。

2. extractMax():将堆顶元素去除,此操作的时间复杂度为O(Log n),因为此操作需要在除去根之后维护堆属性(通过调用heapify())。

3. insert():插入一个新的结点,时间复杂度为O(Log n),首先是将新结点加入到堆的最后,如果新结点比其父节点小,则不需要做任何操作,反之,需要向上回溯去维护大根堆的性质。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值