数据结构(5)

news2025/1/11 12:50:40

堆可以看作一颗完全二叉树的数组对象。

特性:

1.堆是完全二叉树,除了树最后一层不需要满,其余层次都需要满,如果最后一层不是满的,那么要求左满右不满

 2.通常使用数组实现,将二叉树结点依次放入数组中,根结点再位置1,子结点在2和3,子结点的子结点在4,5,6,7,以此类推。

 如果结点位置为k,父节点位置为k/2,子结点分别是2k和2k+1。

3.每个结点大于等于子节点,两个子结点顺序未安排。

元素上浮下沉:

//使用上浮算法,使索引k处的元素能在堆中处于一个正确的位置
private void swim(int k){
//如果已经到了根结点,就不需要循环了
while(k>1){
//比较当前结点和其父结点
if(less(k/2,k)){
//父结点小于当前结点,需要交换
exch(k/2,k);
}
k = k/2;
}
}

//使用下沉算法,使索引k处的元素能在堆中处于一个正确的位置
private void sink(int k){
//如果当前已经是最底层了,就不需要循环了
while(2*k<=N){
//找到子结点中的较大者
int max;
if (2*k+1<=N){//存在右子结点
if (less(2*k,2*k+1)){
max = 2*k+1;
}else{
max = 2*k;
}
}else{//不存在右子结点
max = 2*k;
}
//比较当前结点和子结点中的较大者,如果当前结点不小,则结束循环
if (!less(k,max)){
break;
}
//当前结点小,则交换,
exch(k,max);
k = max;
}
}
}

堆构造:

创建一个新数组,将原数组0~length-1的数据拷贝到新数组1~length处,从新数组长度的一般开始往索引1处扫描(从右往左),对每个元素进行下沉处理。

堆排序:

在构造好的堆上进行:

1.交换堆顶元素和最大索引处元素,代表最大和最小

2.下沉堆顶元素,忽略最大索引处的最大元素,范围是【1,N-执行次数】

3.重复1和2步骤,直到范围变成【1,1】

int N = heap.length-1;
while(N!=1){
//3.2交换heap中索引1处的元素和N处的元素
exch(heap,1,N);
N--;
//3.3对索引1处的元素在0~N范围内做下沉操作
sink(heap,1,N);
}
//在heap堆中,对target处的元素做下沉,范围是0~range
private static void sink(Comparable[] heap, int target, int range){
//没有子结点了
while (2*target<=range){
//1.找出target结点的两个子结点中的较大值
int max=2*target;
if (2*target+1<=range){
//存在右子结点
if (less(heap,2*target,2*target+1)){
max=2*target+1;
}
}
//2.如果当前结点的值小于子结点中的较大值,则交换
if(less(heap,target,max)){
exch(heap,target,max);
}
//3.更新target的值
target=max;
}
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/917877.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二、数学建模之整数规划篇

1.定义 2.例题 3.使用软件及解题 一、定义 1.整数规划&#xff08;Integer Programming&#xff0c;简称IP&#xff09;&#xff1a;是一种数学优化问题&#xff0c;它是线性规划&#xff08;Linear Programming&#xff0c;简称LP&#xff09;的一个扩展形式。在线性规划中&…

渗透测试和红队技术解析:分析渗透测试方法、工具和技巧,深入了解红队行动背后的战术和策略

章节一&#xff1a;引言 在当今数字化世界中&#xff0c;信息安全已经成为各个组织和企业的头等大事。为了确保其信息系统的安全性&#xff0c;渗透测试和红队行动变得愈发重要。本文将带您深入探讨渗透测试的方法、工具和技巧&#xff0c;并剖析红队行动的战术和策略。 章节…

【前端实习生备战秋招】—前端性能优化篇,建议收藏

【前端实习生备战秋招】—前端性能优化篇&#xff0c;建议收藏 文章目录 【前端实习生备战秋招】—前端性能优化篇&#xff0c;建议收藏一、CDN1. CDN的概念2. CDN的作用3. CDN的原理4. CDN的使用场景 二、懒加载1. 懒加载的概念2. 懒加载的特点3. 懒加载的实现原理4. 懒加载与…

分类行为的排斥作用

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点&#xff0c;AB训练集各由5张二值化的图片组成&#xff0c;让A中有2个1&#xff0c;B中有1个1&#xff0c;且不重合&#xff0c;排列组合&#xff0c;统计迭代次数并排序。 其中有6组数据 构造平均列A 构造平均…

使用扩展函数方式,在Winform界面中快捷的绑定树形列表TreeList控件和

在一些字典绑定中&#xff0c;往往为了方便展示详细数据&#xff0c;需要把一些结构树展现在树列表TreeList控件中或者下拉列表的树形控件TreeListLookUpEdit控件中&#xff0c;为了快速的处理数据的绑定操作&#xff0c;比较每次使用涉及太多细节的操作&#xff0c;我们可以把…

java八股文面试[数据结构]——ArrayList和LinkedList区别

ArrayList和LinkedList的异同 二者的线程都不安全&#xff0c;相对线程安全的Vector,执行效率高。此外&#xff0c;ArrayList时实现了基于动态数组的数据结构&#xff0c;LinkedList基于链表的数据结构&#xff0c;对于随机访问get和set&#xff0c;ArrayList觉得优于LinkedLis…

异地机房容灾备份方案,异地容灾备份方式有哪些

任何时候&#xff0c;我们都不能避免自然灾害、硬件问题、黑客攻击等事故。这些事情可能会导致数据中心的偏瘫&#xff0c;甚至影响整个业务的正常使用。因此&#xff0c; 机房容灾备份计划已成为确保业务连续性的关键对策。 一、异地机房容灾备份方案是什么&#xff1f; 国外…

Shell的一些基础

1.查看某个路径下的目录和文件列表 ls -lR 路径 2.统计某个路径下的文件数量&#xff1a; ls -lR lntest/ | grep “^-” | wc -l 3.找出进程里占用CPU或者内存最高的进程 首先 ps aux 列出来的&#xff0c;cpu是第三列&#xff0c;内存是第四列&#xff0c;所以找出占用cpu最…

word里的文字限制编辑,不知道密码怎么办?

Word文档可以设置加密来保护文件禁止修改&#xff0c;但是在word文档中设置限制编辑功能时对它的作用是否有详细的了解呢&#xff1f;今天为大家介绍word限制编辑功能的作用以及忘记了限制编辑密码该如何解决。 设置限制大家应该都清楚&#xff0c;就是点击工具栏中的审阅 – …

视频集中存储/直播点播平台EasyDSS内核无法启动是什么原因?

视频推拉流EasyDSS视频直播点播平台&#xff0c;集视频直播、点播、转码、管理、录像、检索、时移回看等功能于一体&#xff0c;可提供音视频采集、视频推拉流、播放H.265编码视频、存储、分发等视频能力服务。 有用户反馈&#xff0c;下载了视频直播点播平台EasyDSS最新版本&a…

金属氧化物变阻器美国市场估算为13亿美元,中国则将以年复合成长率13.5%增长

金属氧化物变阻器是一种电子元件&#xff0c;它的作用是限制电流过大时对电路的损害。MOV的主要构成材料是金属氧化物&#xff0c;例如氧化锌&#xff08;ZnO&#xff09;。当电路中的电压超过预定值时&#xff0c;MOV会迅速变得导电&#xff0c;从而限制电流的继续增加。这个特…

问题描述:在Windows下没有预装ImageMagick工具

问题描述:在Windows下没有预装ImageMagick工具 # WInR输入cmd回车进入命令行,执行以下命令查看版本信息 magick --version没有预装ImageMagick工具 解决方案&#xff1a;下载安装ImageMagick 官网下载:ImageMagick-7.1.1-15-Q16-x64-dll.exe 下载之后&#xff0c;一路下一步…

系统架构设计师-计算机系统基础知识(1)

目录 一、计算机系统概述 1、冯诺依曼计算结构​编辑 二、存储系统 三、操作系统概述 1、特殊的操作系统 四、进程管理 1、进程与线程的概念 2、进程的同步与互斥 3、PV操作 4、死锁与银行家算法 一、计算机系统概述 1、冯诺依曼计算结构 二、存储系统 从上到下依次&#…

【C修炼计划】卷壹 · 初识C语言

文章目录 卷壹 初识C语言一 C语言的起源二 C语言的特性三 C语言的应用范围四 C语言程序结构五 C语言书写规范六 C语言编译器安装附 参考资料 卷壹 初识C语言 一 C语言的起源 C语言的前生是B语言&#xff08;BCPL&#xff0c;一种早期的高级语言&#xff09;。下图描…

快手正面临着严重的监管阻力,股价上涨潜力将遭受严重限制

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 积极的盈利预警 上月底&#xff0c;快手&#xff08;01024&#xff09;发布公告称&#xff0c;该公司预计2023年上半年的净收入将达到5.6亿元人民币。 考虑到快手报告的2023年第一季度归属于股东的净亏损为- 8.73亿元人民币…

顶尖测试学思维?跟Google大佬学顶级测试思维!

谷歌员工怎么写 python 代码&#xff1f; 谷歌内部的 python 代码规范 熟悉 python 一般都会努力遵循 pep8 规范&#xff0c;也会有一些公司制定内部的代码规范。大公司制定规范的目的不是说你一定要怎样去使用编程语言&#xff0c;而是让大家遵守同一套规则&#xff0c;节省…

选择适合企业的文件传输方式:SFTP与SCP的比较及应用场景分析

企业的发展和业务拓展必不可少地依赖于文件传输。为确保数据安全且传输高效&#xff0c;选择适宜的文件传输方式至关重要。在众多选择中&#xff0c;基于SSH协议的SFTP和SCP备受青睐。 以下将详细介绍SFTP和SCP&#xff0c;分析它们适用的企业文件传输场景。 一、SFTP与SCP的差…

Wireshark数据抓包分析之互联网协议(IP协议)

一、实验目的&#xff1a; 通过wireshark抓包分析IP协议的具体内容 二、预备知识&#xff1a; 1.IP地址存在的意义&#xff0c;就是为了弥补mac地址的不足&#xff0c;用于区分不同的网络 2.还有一些ip协议、ip数据包这些东西 三、网络拓扑 四、实验过程&#xff1a; part1&…

DeepMind UCL 推出新的推理模型和测试集

侦探大师可能会检查丢弃在烟灰缸中的香烟和翻领上的一缕头发&#xff0c;然后宣布他们已经解决了谋杀案。这些惊人的结论是通过推理得出的&#xff0c;推理是一种微妙而独特的人类技术&#xff0c;可以根据看似不同或遥远的物品和事件之间的联系形成预测。推理是当今神经网络研…

面对全球跨境市场挑战,2023下半年如何适应新赛道与全托管布局?

在2023年&#xff0c;跨境电商行业逐渐复苏并持续发展&#xff0c;伴随着一系列有利于跨境贸易的政策逐步推动。 与此同时&#xff0c;随着多个平台陆续推出“全托管模式”&#xff0c;竞争在跨境电商巨头之间进一步激化。那么&#xff0c;面对2023年下半年的全球跨境市场挑战…