数据结构-堆

server/2024/10/18 12:21:52/

堆通常是一个可以被看做一棵树的数组对象。堆的具体实现一般不通过指针域,而是通过构建一个一维数组与二叉树的父子结点进行对应,因此堆总是一颗完全二叉树。对于任意一个父节点的序号n来说(这里n从0算),它的子节点的序号一定是2n+1,2n+2,因此可以直接用数组来表示一个堆。不仅如此,堆还有一个性质:堆中某个节点的值总是不大于或不小于其父节点的值。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。堆常用来实现优先队列,在面试中经常考的问题都是与排序有关,比如堆排序、topK问题等。由于堆的根节点是序列中最大或者最小值,因而可以在建堆以及重建堆的过程中,筛选出数据序列中的极值,从而达到排序或者挑选topK值的目的。

数据结构中的堆(Heap)是一种特殊的树形数据结构,可以看作是一棵完全二叉树。它的主要特点是根节点的键值是所有节点中最小(或最大)的,并且堆中每个父节点的键值都小于或等于(或大于或等于)其所有子节点的键值。

堆通常使用数组来表示,其中每个元素都对应于树中的一个节点。在数组中,父节点和子节点之间的关系可以通过下标来直接计算。例如,对于任意节点i,其父节点可以通过(i-1)/2来计算,而其左右子节点则可以通过2*i+1和2*i+2来计算。

根据根节点键值的不同,堆可以分为最小堆和最大堆。最小堆中根节点的键值是所有节点中的最小值,而最大堆中根节点的键值是所有节点中的最大值。

堆在计算机科学中有着广泛的应用,例如堆排序、优先队列、Dijkstra算法等。在这些应用中,堆通常被用来快速找到最小(或最大)元素,或者快速删除最小


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

相关文章

第G9周:ACGAN理论与实战

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 | 接辅导、项目定制🚀 文章来源:K同学的学习圈子 上一周已经给出代码,需要可以跳转上一周的任务 第G8周:ACGAN任…

微服务之分布式理论zookeeper概述

一、分布式技术相关的理论 CAP理论 CAP定理(CAP theorem),⼜被称作布鲁尔定理(Eric Brewer),1998年第⼀次提出. 最初提出是指分布式数据存储不可能同时提供以下三种保证中的两种以上: (1) ⼀致性(Consistency): 每次读取收到的信息都是最新的; (2) …

微信小程序for循环示例(JavaScript)

微信小程序for循环示例(JavaScript) 在微信小程序开发中,我们最常用的循环方式就是for和foreach,接下来我就浅浅的将自己的写的一小段示例代码分享给大家。 首先是for循环,也是咱们最常用的方式,具体示例…

Github入门

GitHub 入门指南:从零开始学习使用 GitHub GitHub 是全球最大的代码托管平台之一,不仅是开发者们交流与协作的重要场所,也是学习与分享优秀代码的宝库。无论你是一位新手开发者还是经验丰富的专家,GitHub 都是你必须掌握的利器之…

【JS】找出两个数组中的相同元素与不同元素

一、找出相同元素 &#xff08;1&#xff09;方法一 const filterArr (arr1, arr2) > {let result [];for (let i 0; i < arr1.length; i) {for (let j 0; j < arr2.length; j) {if (arr1[i] arr2[j]) {result.push(arr1[i]);}}}return result; };&#xff08;…

C语言——动态内存管理

大家好&#xff0c;本期和大家分享C语言动态内存管理有关知识&#xff0c;记得三连支持一下哦&#xff01; 一、为什么要有动态内存分配 我们目前已经知道的内存开辟方式有两种&#xff0c;分别是&#xff1a;定义变量和开辟数组空间。 这两种方式都有共同的特点&#xff1a;…

OpenAI 新推出 AI 问答搜索引擎——SearchGPT 震撼登场

您的浏览器不支持 video 标签。 OpenAI-SearchGPT 近日&#xff0c;OpenAI 曝光了自己的一款令人瞩目的 AI 问答搜索引擎——SearchGPT。这款搜索引擎带来了全新的搜索体验&#xff0c;给整个行业带来了巨大的压力。 SearchGPT 支持多种强大的功能。首先&#xff0c;它能够通过…

Spark 为什么比 Hive 快

文章目录 数据处理方式不同并行方式不同稳定性不同Shuffle 方式不同 数据处理方式不同 Spark 是基于内存计算的分布式计算框架&#xff0c;可以在内存中高效地执行数据操作&#xff0c;因此通常比 Hive 更快。Spark 会尽可能将数据加载到内存中&#xff0c;并在内存中执行多个…