数据结构(堆)

server/2025/1/18 9:22:21/

一.概念及其介绍

1.堆(Heap)是计算机科学中一类特殊的数据结构的统称。

堆就是以二叉树的顺序存储方式来存储元素,同时又要满足父亲结点存储数据都要大于等于儿子结点存储数据(也可以是父亲结点数据都要小于等于儿子结点数据)的一种数据结构

堆只有两种即大堆和小堆,大堆就是父亲结点数据大于等于儿子结点数据,小堆则反之。

2.堆满足下列性质:

堆中某个节点的值总是不大于或不小于其父节点的值。

堆总是一棵完全二叉树。

二.适用说明

堆是利用完全二叉树的结构来维护一组数据,然后进行相关操作,一般的操作进行一次的时间复杂度在 O(1)~O(logn) 之间,堆通常用于动态分配和释放程序所使用的对象。

若为优先队列的使用场景,普通数组或者顺序数组,最差情况为 O(n^2),堆这种数据结构也可以提高入队和出队的效率。

三.堆结构

二叉堆是一颗完全二叉树,且堆中某个节点的值总是不大于其父节点的值,该完全二叉树的深度为 k,除第 k 层外,其它各层 (1~k-1) 的结点数都达到最大个数,第k 层所有的结点都连续集中在最左边。

其中堆的根节点最大称为最大堆,如下图所示:

四.堆的应用

优先队列实现:用于操作系统任务调度、图算法(如 Dijkstra 算法)等,根据元素优先级处理元素。

堆排序:对数组元素排序,时间复杂度 O (n log n)。

求第 K 大(小)元素:可快速找出第 K 大或第 K 小元素。

中位数维护:使用两个堆维护数据流的中位数。

合并 K 个有序列表:高效合并多个有序列表为一个有序列表。


http://www.ppmy.cn/server/159316.html

相关文章

从零深度学习:(2)最小二乘法

今天我们从比较简单的线性回归开始讲起,还是一样我们先导入包 import numpy as np import torch import matplotlib as mpl import matplotlib.pyplot as plt a torch.arange(1,5).reshape(2,2).float() a 我们利用刚刚导入的画图的包将这两个点画出来&#xff0…

数据结构-栈队列OJ题

文章目录 一、有效的括号二、用队列实现栈三、用栈实现队列四、设计循环队列 一、有效的括号 (链接:ValidParentheses) 这道题用栈这种数据结构解决最好,因为栈有后进先出的性质。简单分析一下这道题:所给字符串不是空的也就是一定至少存在一…

C# 线程基础之 线程同步

线程同步的手段很多 lock 是通过内存索引块 0 1 切换 进行互斥的实现 互斥量 信号量 事件消息 其实意思就是 一个 标记量 通过这个标记 来进行类似的互斥手段 具体方式的分析 代码在后 1.互斥量 Mutex 作用 非常类似lock 一个Mutex 名称来代替 lock的引用对象 2.信号量 Semaph…

ASP.Net Identity + IODC 解析ReturnUrl

Identity Ids4 配置 成认证服务 一、创建 Identity身份验证 项目 创建的项目结构中 没有 注册和登录的 控制器和视图 配置数据库地址 》》默认已经生成了Miagratin 直接update-database 二、在Identity项目 配置 IdentityServer4 Nuget 两个包 》》》配置Config 类 usin…

鸿蒙Flutter实战:16-无痛开发指南(适合新手)

本文讲述如何通过 Flutter 开发鸿蒙原生应用。整个过程结合往期文章、实战经验、流程优化,体验丝滑、无痛。 无痛搭建开发环境 为了减少疼痛,这里使用全局唯一的 Flutter 版本开发。高阶用法可以参看往期同系列文章。 硬件准备 一台 Mac,一部…

当设置dialog中有el-table时,并设置el-table区域的滚动,看到el-table中多了一条横线

问题:当设置dialog中有el-table时,并设置el-table区域的滚动,看到el-table中多了一条横线; 原因:el-table有一个before的伪元素作为表格的下边框下,初始的时候已设置,在滚动的时候并没有重新设置…

BGP边界网关协议(Border Gateway Protocol)概念、邻居建立

一、定义 主要用于交换AS之间的可达路由信息,构建AS域间的传播路径,防止路由环路的产生,并在AS级别应用一些路由策略。当前使用的版本是BGP-4。 二、环境 底层以OSPF进行igp互联互通,上层使用BGP协议。 三、基本原理 1、BGP是一…

unity学习16:unity里向量的计算,一些方法等

目录 1 unity里的向量: 2 向量加法 2.1 向量加法的几何意义 2.2向量加法的标量算法 3 向量减法 3.1 向量减法的几何意义 3.2 向量减法的标量算法 4 向量的标量乘法 5 向量之间的乘法要注意是左乘 还是右乘 5.1 注意区别 5.2 向量,矩阵&#x…