0

0

优先级队列PriorityQueue底层最小堆的排序原理

冷漠man

冷漠man

发布时间:2026-03-19 08:46:42

|

348人浏览过

|

来源于php中文网

原创

PriorityQueue底层基于最小堆实现,保证堆顶最小且满足父子大小关系,而非全局有序;插入时新元素上浮、删除时末尾元素下沉,均耗时O(log n);因只需快速获取最小值,故比全排序更高效。

优先级队列priorityqueue底层最小堆的排序原理

PriorityQueue 底层用的是最小堆(小根堆),不是按整个数组排好序,而是保证“堆顶最小”,其余元素只满足父子大小关系,不追求全局有序。

最小堆的结构约束

它是一棵完全二叉树,用数组顺序存储:

  • 下标为 i 的节点,父节点在 (i−1)/2(整除)
  • 左孩子在 2i+1,右孩子在 2i+2
  • 每个非叶节点的值 ≤ 它的左右子节点(即:父 ≤ 子)
  • 所以堆顶(下标 0)永远是当前所有元素中的最小值

插入新元素时怎么维持最小堆

新元素加到数组末尾,然后“上浮”(sift-up):

Felvin
Felvin

AI无代码市场,只需一个提示快速构建应用程序

下载
  • 比较它和父节点,若比父小,就交换
  • 继续向上比较,直到它 ≥ 父节点,或到达堆顶
  • 这个过程最多比较 log₂n 次,时间复杂度 O(log n)

取最小值(poll)后怎么重平衡

取出堆顶后,把最后一个元素挪到堆顶,再“下沉”(sift-down):

  • 拿当前节点和两个子节点中较小的那个比较
  • 如果当前节点更大,就和那个较小的子节点交换
  • 重复该过程,直到它 ≤ 两个子节点,或没有子节点为止
  • 同样只需 O(log n) 时间

为什么不用全排序却能高效支持优先级操作

因为 PriorityQueue 只关心“谁最小”,不关心其余元素之间的大小顺序:

  • 堆结构天然支持 O(1) 查最小、O(log n) 插入/删除最小
  • 全排序需要 O(n log n),还额外占用空间或破坏插入效率
  • 像任务调度、Top-K、合并 K 个有序链表等场景,只需要反复拿最小,堆是最优解

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

451

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

606

2023.08.10

bootstrap安装教程
bootstrap安装教程

本专题整合了bootstrap安装相关教程,阅读专题下面的文章了解更多详细操作教程。

22

2026.03.18

bootstrap框架介绍
bootstrap框架介绍

本专题整合了bootstrap框架相关介绍,阅读专题下面的文章了解更多详细内容。

137

2026.03.18

vscode 格式化
vscode 格式化

本专题整合了vscode格式化相关内容,阅读专题下面的文章了解更多详细内容。

13

2026.03.18

vscode设置中文教程
vscode设置中文教程

本专题整合了vscode设置中文相关内容,阅读专题下面的文章了解更多详细教程。

8

2026.03.18

vscode更新教程合集
vscode更新教程合集

本专题整合了vscode更新相关内容,阅读专题下面的文章了解更多详细教程。

8

2026.03.18

Gemini网页版零基础入门:5分钟上手Gemini聊天指南
Gemini网页版零基础入门:5分钟上手Gemini聊天指南

本专题专为零基础用户打造,5分钟快速掌握Gemini网页版核心用法。从账号登录到界面布局,详解如何发起对话、优化提示词及利用多模态功能。通过实战案例,教你高效获取信息、创作内容与分析数据。无论学习还是工作,轻松开启AI辅助新时代,让Gemini成为你的得力智能助手。

51

2026.03.18

Python WebSocket实时通信与异步服务开发实践
Python WebSocket实时通信与异步服务开发实践

本专题聚焦 Python 在实时通信场景中的开发实践,系统讲解 WebSocket 协议原理、长连接管理、消息推送机制以及异步服务架构设计。内容包括客户端与服务端通信实现、连接稳定性优化、消息队列集成及高并发处理策略。通过完整案例,帮助开发者构建高效稳定的实时通信系统,适用于聊天应用、实时数据推送等场景。

33

2026.03.18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号