当前位置: 首页 > news >正文

完全二叉树与堆

完全二叉树,仅允许最底层的节点不完全填满,且最底层的节点必须从左至右依次连续填充。

堆(heap)是一种满足特定条件的完全二叉树,主要可分为两种类型:
1,小顶堆(min heap):任意节点的值 小于其子节点的值。
2,大顶堆(max heap):任意节点的值 大于其子节点的值。

编程语言提供的是优先队列(priority queue),定义为具有优先级排序的队列。堆通常用于实现优先队列,大顶堆相当于元素按从大到小的顺序出队的优先队列。我们可以将“优先队列”和“堆”看作等价的数据结构。

/* 初始化堆 */// 初始化小顶堆Queue<Integer>minHeap=newPriorityQueue<>();// 初始化大顶堆(使用 lambda 表达式修改 Comparator 即可)Queue<Integer>maxHeap=newPriorityQueue<>((a,b)->b-a);/* 元素入堆 */maxHeap.offer(1);maxHeap.offer(3);maxHeap.offer(2);maxHeap.offer(5);maxHeap.offer(4);/* 获取堆顶元素 */intpeek=maxHeap.peek();// 5/* 堆顶元素出堆 */// 出堆元素会形成一个从大到小的序列peek=maxHeap.poll();// 5peek=maxHeap.poll();// 4peek=maxHeap.poll();// 3peek=maxHeap.poll();// 2peek=maxHeap.poll();// 1/* 获取堆大小 */intsize=maxHeap.size();/* 判断堆是否为空 */booleanisEmpty=maxHeap.isEmpty();/* 输入列表并建堆 */minHeap=newPriorityQueue<>(Arrays.asList(1,3,2,5,4));

堆通常作为实现优先队列的首选数据结构,其入队和出队操作的时间复杂度均为Ologn 。给定一组数据,我们用堆存储,然后不断地执行出堆操作,就可以得到有序数据。Top-k 是一个经典算法问题,可以使用堆数据结构高效解决 ,选择热度前 5 ,选取销量前 5 的商品等都是常见的应用。

/* 基于堆查找数组中最大的 k 个元素 */Queue<Integer>topKHeap(int[]nums,intk){// 初始化小顶堆Queue<Integer>heap=newPriorityQueue<Integer>();// 将数组的前 k 个元素入堆for(inti=0;i<k;i++){heap.offer(nums[i]);}// 从第 k+1 个元素开始,保持堆的长度为 kfor(inti=k;i<nums.length;i++){// 若当前元素大于堆顶元素,则将堆顶元素出堆、当前元素入堆if(nums[i]>heap.peek()){heap.poll();heap.offer(nums[i]);}}returnheap;}

总共执行了 n 轮入堆和出堆,堆的最大长度为k ,因此时间复杂度为nlogk 。该方法的效率很高,当
k较小时,时间复杂度趋向n ;当 k 较大时,时间复杂度不会超过 nlogn 。

http://www.cnnetsun.cn/news/20558.html

相关文章:

  • 继电器:电力安全的隐形守护者
  • R.swift终极配置指南:构建强类型资源管理系统的完整实践
  • 联邦学习赋能YOLOv5:计算机视觉的隐私保护新范式
  • 从卡顿到丝滑:我的酷安桌面化使用体验
  • kmp算法
  • AgentHub更新:LangGraph+千问实现Adaptive RAG系统
  • 快速掌握RustFS分布式存储监控告警系统:从异常检测到智能通知的完整指南
  • Steamless终极指南:轻松移除Steam游戏DRM保护
  • 图像对比工具在网络安全配置中的高效应用与优化策略
  • 终极指南:macOS iSCSI Initiator快速连接远程存储
  • 在.NET Framework 4.7.2 使用Microsoft.Practices.EnterpriseLibrary.Data配置出错
  • 【论文自动阅读】HIERARCHICAL MIXTURE-OF-EXPERTS FOR GENERALIST VISION-LANGUAGE-ACTION POLICIES
  • FastDepth:嵌入式系统上的快速单目深度估计
  • Solidity 中的using for详解
  • GPT-5.2 的数据基石、原生多模态与隐私承诺的深度考量
  • 开源代码智能体SWE-Dev-9B崛起:逼近GPT-4o性能,90%工程师效率革命加速
  • Wasmer WebAssembly运行时终极指南:从零到实战部署
  • 2025年推荐一些程序员常逛的开发者社区
  • ExplorerPatcher深度解析:重塑Windows界面体验的终极方案
  • SketchUp STL插件实战指南:打通3D打印的最后一公里
  • 基于VUE技术的健康监测可视化系统设计与实现开题报告
  • 基于VUE技术的健康监测可视化系统设计与实现任务书
  • Smithbox游戏修改工具:从玩家痛点出发的7大深度解决方案
  • Qt + VS2017 编译缺少库,在对方设备无法运行,推荐几种做法。
  • 窗口管理大师:WindowResizer完整使用指南
  • 20亿参数撬动工业质检革命:Isaac-0.1开启边缘智能新纪元
  • 基于web的超市管理系统开题报告
  • Driver.js 1.x升级攻略:告别旧版,拥抱全新API设计
  • Laudspeaker:终极开源客户参与平台完全指南
  • 20、Snort Options and iptables Packet Filtering