首页 > 编程语言 >python heapq 堆模块

python heapq 堆模块

时间:2022-10-13 17:46:37浏览次数:50  
标签:heapq 结点 python hp 元素 arr 二叉树 模块

python heapq模块

引言

堆(heapq): 一类特殊数据结构,通常是一个可以被看做一棵树的数组对象。

堆的性质:

  • 堆中某个节点的值,总是不大于或不小于其父节点的值;
  • 堆总是一颗完全二叉树。

堆分类:

将根节点最大的堆叫做最大堆或大顶堆,根节点最小的堆叫做最小堆或小顶堆。

常见的堆有二叉堆、斐波那契堆等。

堆的定义:

n个元素的序列{k1,k2,ki,…,kn}当且仅当满足下关系时,称之为堆。
(ki <= k2i,ki <= k2i+1)或者(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4…n/2)

若将和此次序列对应的一维数组(即以一维数组作此序列的存储结构)看成是一个完全二叉树,则堆的含义表明,完全二叉树中所有非终端结点的值均不大于(或不小于)其左、右孩子结点的值。

由此,若序列{k1,k2,…,kn}是堆,则堆顶元素(或完全二叉树的根)必为序列中n个元素的最小值(或最大值)。

每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;

或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。

heapq 模块API

# 函数
heappush(heap, x)   # 将x压入堆中
heappop(heap)  # 从堆中弹出最小的元素
heapify(heap)  # 让列表具备堆的特征
heapreplace(heap, x)  # 弹出最小元素, 并将x压入堆中
nlargest(n, iter)  # 返回iter中最大的元素
nsmallest(n, iter)  # 返回iter中最小的元素

eg:

class Solution_40:
    def getLeastNumbers(self, arr: List[int], k: int)->List[int]:
        """
        使用堆的思想来实现,求整数列表中前k个最小值
        """
        import heapq
        if k == 0:
            return
        hp = [-x for x in arr[:k]]
        heapq.heapify(hp)
        for i in range(k, len(arr)):
            if -hp[0] > arr[i]:
                heapq.heappop(hp)
                heapq.heappush(hp, -arr[i])
        ans = [-x for x in hp]
        return ans

标签:heapq,结点,python,hp,元素,arr,二叉树,模块
From: https://www.cnblogs.com/01black-white/p/16788940.html

相关文章

  • Python 变量与引用
    一、变量的引用  1、在python中,变量和引用都保存在内存中  2、在python中,函数的传递以及返回值都是靠引用传递的二、引用的概念  1、在python中,变量和数据是分......
  • linux:安装pytorch(python3.6.8 / pytorch 1.10.1+cu102)
    一,pytorch的官网:https://pytorch.org/如图:根据自己的需求选择版本、平台、语言环境等信息,然后运行命令即可说明:刘宏缔的架构森林是一个专注架构的博客,地址:https:/......
  • python修炼 - python基础 Day1
    1、Python安装Windows1、下载安装包    https://www.python.org/downloads/windows2、安装    默认安装路径:C:\python-3.73、配置环境变量    【右键......
  • python规则大全
    ​​https://www.runoob.com/python/python-reg-expressions.html​​​​https://regexr.com/​​​​http://c.runoob.com/front-end/854​​​​http://alf.nu/RegexGolf......
  • python操作pgSQL
    #连接数据库需要提供相应的数据库名称、用户名、密码、地址、端口等信息conn=psycopg2.connect(database=db,user=user,password=pw,host=host,port=port)curs=conn.cursor(......
  • python将dict导出为Excel
    fromxlsxwriterimportWorkbookplayers=[{'dailyWinners':3,'dailyFree':2,'user':'Player1','bank':0.06},{'dailyWinners':3,'dailyFree':2,'user':'Play......
  • python-docx--word解析模块
    ​​https://python-docx.readthedocs.io/en/latest/#user-guide​​最好的学习资料就是官方文档......
  • python ssh 交互式命令行脚本
    importparamikoimportjsonimporttimeimportsysimportosfromparamiko.ssh_exceptionimportNoValidConnectionsErrorfromparamiko.ssh_exceptionimportAut......
  • 常用脚本(python)
    目录:    第一部分:布尔盲注类型:importrequestsurl="http://32a87616-b3a4-4290-808b-9c3d3e1163d2.node4.buuoj.cn:81/index.php"forchangduinrange(1,......
  • python 异常总结:raise except
    raise语句是用来主动抛出一个指定的异常。raise语法格式:raise[Exception[,args[,traceback]]]raise主动抛出异常种类总结:except有匹配的error类型except......