| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Python知识库 -> python-堆 -> 正文阅读 |
|
[Python知识库]python-堆 |
堆的概念● 堆:一种特殊的完全二叉树结构 ????????? 大根堆:一棵完全二叉树,满足任一节点都比其孩子节点大 ????????? 小根堆:一棵完全二叉树,满足任一节点都比其孩子节点小 堆的性质堆的性质——向下调整: ????????? 假设根节点的左右孩子树都是堆,但根节点不满足堆的性质 ????????? 可以通过一次向下的调整来将其变成一个堆 堆排序过程——农村包围城市的策略?????????(1)建堆 ?????????(2)得到堆顶元素,为最大元素 ?????????(3)去掉堆顶,将堆最后一个元素放到堆顶,此时可通过一次调整重新使堆有序 ?????????(4)堆顶元素为第二大元素 ?????????(5)重复步骤3,直到堆变空 ?????代码实现
?堆排序——内置模块● python内置模块——heapq ● 常用函数 ????????? heappush(heap,item) ????????? heapify(heap)? ????????? heappop(heap) 注:内置模块实现的是小根堆用,假如要实现大根堆,得用小根堆来构造大根堆 (1)heappush(heap,item)heapq.heappush()是往堆中添加新值,此时自动建立了小根堆 ????????◆ 建立小根堆
????????◆ 建立大根堆 ????????heapq里面没有直接提供建立大根堆的方法,可以采取如下方法: ? ? ? ? (1)每次push时给元素加一个负号(即取相反数),此时最小值变最大值,反之亦然; ????????(2)那么实际上的最大值就可以处于堆顶了,返回时再取负即可。 ????????或者 ????????(1)先建立小根堆,然后每次heappop(),此时得到从小大的排列,再reverse? ????????(2)利用相反数建立大根堆,然后heappop(-元素)。即push(-元素),pop(-元素)
(2)heapify(heap)?????????heapq.heapfy()是以线性时间将一个列表转化为小根堆 ????????◆ 建立小根堆
?????????◆ 建立大根堆
?(3)heappop(heap)????????heapq.heappop()是从堆中弹出并返回最小的值
参考:Python中heapq模块浅析_chandelierds的博客-CSDN博客_heapq python top K问题?代码实现
? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/25 15:00:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |