4.数据结构---堆
分类:
数据结构
一、堆
1.最小堆 【Python heapq模块】
heap为定义堆,item增加的元素 heapq.heappush(heap,item)
1 2 3 4 5 | >>> import heapq >>> h = [] >>> heapq.heappush(h, 2 ) >>> h [ 2 ] |
将列表转换为堆 heapq.heapify(list)
1 2 3 4 | >>> list = [ 1 , 2 , 3 , 5 , 1 , 5 , 8 , 9 , 6 ] >>> heapq.heapify( list ) >>> list [ 1 , 1 , 3 , 5 , 2 , 5 , 8 , 9 , 6 ] |
删除最小值,因为堆的特征是heap[0]永远是最小的元素,所以一般都是删除第一个元素 heapq.heappop(heap)
1 2 3 4 5 6 | >>> list [ 1 , 1 , 3 , 5 , 2 , 5 , 8 , 9 , 6 ] >>> heapq.heappop( list ) 1 >>> list [ 1 , 2 , 3 , 5 , 6 , 5 , 8 , 9 ] |
删除最小元素值,添加新的元素值 heapq.heapreplace(heap.item)
1 2 3 4 5 6 | >>> list [ 1 , 2 , 3 , 5 , 6 , 5 , 8 , 9 ] >>> heapq.heapreplace( list , 99 ) 1 >>> list [ 2 , 5 , 3 , 9 , 6 , 5 , 8 , 99 ] |
首先判断添加元素值与堆的第一个元素值对比,如果大,则删除第一个元素,然后添加新的元素值,否则不更改堆 heapq.heapreplace(heap,item)
1 2 3 4 5 6 7 8 9 10 | >>> list [ 2 , 5 , 3 , 9 , 6 , 5 , 8 , 99 ] >>> heapq.heappushpop( list , 6 ) 2 >>> list [ 3 , 5 , 5 , 9 , 6 , 6 , 8 , 99 ] >>> heapq.heappushpop( list , 1 ) 1 >>> list [ 3 , 5 , 5 , 9 , 6 , 6 , 8 , 99 ] |
将多个堆合并 heapq.merge(…)
1 2 3 4 5 6 7 8 | >>> list [ 3 , 5 , 5 , 9 , 6 , 6 , 8 , 99 ] >>> h [ 1000 ] >>> for i in heapq.merge(h, list ): ... print (i,end = " " ) ... 3 5 5 9 6 6 8 99 1000 |
查询堆中的最大元素,n表示查询元素个数 heapq.nlargest(n,heap)
1 2 3 4 5 | >>> list [ 3 , 5 , 5 , 9 , 6 , 6 , 8 , 99 ] >>> heapq.nlargest( 3 , list ) [ 99 , 9 , 8 ] >>> |
查询堆中的最小元素,n表示查询元素的个数 heapq.nsmallest(n,heap)
1 2 3 4 | >>> list [ 3 , 5 , 5 , 9 , 6 , 6 , 8 , 99 ] >>> heapq.nsmallest( 3 , list ) [ 3 , 5 , 5 ] |
2.最大堆
用heapy建立大顶堆:将数据以相反数的形式存入堆,再以相反数的形式取出
1 2 | push(e) - - - >>> push( - e) pop(e) - - - >>> pop( - e) |
参考文献:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现