[Java]堆

article/2025/9/25 12:15:57

目录

一、堆的概念

二、大小根堆的建立

三、 堆的调整

1. 向下调整

2. 向上调整

三、堆的删除与插入


一、堆的概念

堆可以看做一个完全二叉树,如果有一个关键码的集合K = {k0k1 k2kn-1},把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中,并满足:Ki <= K2i+1 Ki<= K2i+2 (Ki >= K2i+1 Ki >= K2i+2) i = 012…,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。

二、大小根堆的建立

大根堆:

首先对一个无序的序列进行完全二叉树的建立,然后从下往上,从右往左找到第一个非叶子结点开始比较,与该节点的孩子结点进行比较,必须满足大于所有孩子结点。

小根堆的建立:

与大根堆类似,首先对一个无序的序列进行完全二叉树的建立,然后从下往上,从右往左找到第一个非叶子结点开始比较,与该节点的孩子结点进行比较,必须满足小于所有孩子结点。

三、 堆的调整

1. 向下调整

private void shiftDown(int parent,int len){int child = 2*parent + 1;while(child < len){if(child + 1 < len && elem[child] < elem[child + 1]){child++;}if(elem[child] > elem[parent]){int tmp = elem[child];elem[child] = elem[parent];elem[parent] = tmp;parent = child;child = 2 * parent + 1;}else{break;}}}

2. 向上调整

public void shiftUp(int child) {int parent = (child - 1) / 2;while (child > 0) {if (elem[parent] > elem[child]) {break;}else{int t = elem[parent];elem[parent] = elem[child];elem[child] = t;child = parent;parent = (child - 1) / 1;}}}

三、堆的删除与插入

堆删除根结点元素,最后一个结点进行补位,然后进行向下调整。

对于已经建好的堆进行插入和删除操作:

1. 插入到完全二叉树的最后位置上,然后向上调整,每次能影响的只是他所在的那个子树,以及另一边一直往下的子树,时间复杂度为O(log2n),就是树的高度。

2. 删除某结点后向下调整,时间复杂度也是完全二叉树的高度O(log2n).


http://chatgpt.dhexx.cn/article/C5BeYxHE.shtml

相关文章

JVM-堆

文章目录 堆&#xff0c;是运行是数据区的一部分堆内存分区&#xff1a;JAVA堆区细分&#xff1a; 设置堆内存大小与OOM设置堆空间大小 OOM Outof Memory Error 举例!!!图解对象分配过程Minor GC、Major GC、Full GC年轻代 GC&#xff08;Minor GC&#xff09;触发机制老年代 G…

jvm堆大小的设置

问题引入&#xff1a; -Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio3&#xff0c;,其最小内存值和Survivor区总大小分别是&#xff08;10240m 2048m&#xff09;&#xff1b; 解析&#xff1a; -Xmx&#xff1a;最大堆大小 -Xms&#xff1a;初始堆大小 -Xmn:年轻…

如何修改java中堆、栈空间的默认大小

1、修改堆、栈空间大小的命令 在命令行中输入java -X可以得到设置java堆大小和栈大小的命令 2、修改java运行时的堆和栈空间 进入界面后 按AltV 3、检验堆空间修改 3.1 测试类 public class StackTest {public static void main(String[] args) {//返回Java虚拟机中的堆内存…

java 堆设置

Young&#xff1a;主要是用来存放新生的对象。&#xff08;Eden、survivorSpaces(from、To)&#xff09; Old&#xff1a;主要存放应用程序中生命周期长的内存对象。 Permanent&#xff1a;是指内存的永久保存区域&#xff0c;主要存放Class和Meta的信息,Class在被 Load的时候…

Java堆内存设置

堆内存设置 原理 JVM堆内存分为2块&#xff1a;永久空间和堆空间。 永久即持久代&#xff08;Permanent Generation&#xff09;&#xff0c;主要存放的是Java类定义信息&#xff0c;与垃圾收集器要收集的Java对象关系不大。Heap {Old NEW {Eden&#xff0c;from&#xff0…

OBEX(一)

一、概述 1、OBEX v2.0&#xff08;v2.0版本开始OBEX直接在L2CAP上传输&#xff0c;v2.0版本以前OBEX在RFCOMM上传输&#xff09; 2、OBEX即Object Exchange Protocol&#xff0c;对象交换协议 3、OBEX协议是典型的client/server request-response模型 4、OBEX v2.0蓝牙协议…

利用docker部署oxidized网络设备备份系统

随着网络设备的增多,通过人手备份网络设备倍感压力,而且效率低。有编程基础的人可能会通过Python的parimiko 或者netmiko 连接到设备操作 把文件通过ftp 上传到FTP服务器, 在通过定时任务,定期自动备份。这个应该是现阶段主流非人民币网络玩家的最优解决方案。 今天我们来看看…

网络自动化运维第一篇 自动化备份网络配置

网络设备厂商众多&#xff0c;各种安全厂商&#xff0c;网络厂商&#xff0c;负载均衡厂商&#xff0c;如果想实现自动化备份配置&#xff0c;可以自己写python脚本。如果网络设备厂商多&#xff0c;自己写python 非常耗费时间精力。偶然在网上发现了oxidized 非常好用&#xf…

.odex文件的反编译

0x00 问题呈现 在分析某手机自带应用时&#xff0c;为了在JEB中反编译&#xff0c;将其adb pull到了电脑上。解压后发现如下文件&#xff1a; APK解压目录列表 惊奇的发现该APK包中没有dex文件&#xff0c;一开始特别疑惑没有dex文件&#xff0c;也就是没有代码&#xff0c;那…

ZeroDivisionError: integer division or modulo by zero

这里的错误就是由于数据集太小。 # 2. Split into train / validation partitionsn_val int(len(dataset) * val_percent)n_train len(dataset) - n_val#我这里是刚好有10张数据集然后其中一张被拆分为验证集导致训练集太小&#xff0c;从而报错。

反编译odex

需要工具&#xff1a; 1、baksmali-x.x.x.jar2、smali-x.x.x.jar工具下载&#xff1a;https://bitbucket.org/JesusFreke/smali/downloads/ 步骤&#xff1a; 1、odex转smali&#xff1a; java -jar “D:\google\tool\mony_tool\baksmali-2.2.1.jar” deodex SystemUI.odex -…

ZeroDivisionError:Integer division or modulo by zero

docker环境下&#xff0c;多GPU训练 方式&#xff1a;采用nvidia-docker创建容器 另&#xff1a; 在用sudo无法解决sh文件的pemission denied问题时&#xff0c;采用bash替代sudo

deactive(Deactive breakpoint)

deactive怎么译&#xff1f; de-active 原指吊销, 计算机的专用词叫 "去活". 多指停止某指令.吊销&#xff0c;不激活&#xff0c;关闭 三星bc01指令代码 三星手机总复位&#xff0c;在待机状态下输入*2767*3855#需要专门的智能仪器才可以解开手机密码忘记了 一般普…

Oxidized-20180912-docker 版本的网络设备备份系统

Problem Oxidized 非常好用&#xff0c;基本兼容所有网络设备的备份&#xff0c;但是有一个小小小小的问题&#xff0c;就是在 Linux 环境下&#xff0c;默认安装的 Ruby 版本问题为其在离线情况下的安装增添了很多的麻烦和限制。 于是轻量级的 docker 成了不二的选择。 &am…

Oxidized-最好用的网络设备备份系统(三)-双机自动备份

oxidized备份网络配置默认路径为 /root/.config/oxidized/group group分别是不同设备分组 group1 group2 group3 group4 双机自动备份思路: 制作将需要备份的数据先备份到back/bak目录下,再通过打包gz格式放到backup目录下,然后通过远程传输,上传到备份服务器的/usr/…

cas:27025-41-8 Glutathione oxidized氧化型谷胱甘肽 活性氧抑制剂

cas:27025-41-8 Glutathione oxidized氧化型谷胱甘肽 活性氧抑制剂 中文名称&#xff1a;氧化型谷胱甘肽 英文名称&#xff1a;Glutathione oxidized 分子量&#xff1a;612.63 性状&#xff1a;Solid 分子式&#xff1a;C20H32N6O12S2 cas:27025-41-8 别称&#xff1a;…

Oxidized-最好用的网络设备备份系统(二)

上文回顾 书接上文, 看完上篇文章的同学相信大家对这个”oxidized” 有了初步的了解, 有同学对config 配置有些疑惑 我这里简单介绍一下。 --- username: username : 用户名 这个参数不用改,会从router.db读取. password: password : 密码 这个参数也不用改,会从router.db…

整理了一下oxidized+mysql+gitlab,感觉很好用,做个记录

安装oxidized 安装ruby yum install centos-release-scl yum install rh-ruby23 rh-ruby23-ruby-devel scl enable rh-ruby23 bash 安装依赖关系 yum install make cmake sqlite-devel openssl-devel libssh2-devel ruby gcc ruby-devel libicu-devel gcc-c 安装oxidized gem…

docker oxidized时区问题,时间显示不是北京时间问题的解决办法

问题描述&#xff1a;oxidized web界面时间显示&#xff0c;默认显示UTC时间&#xff0c;为北京时间-8个小时 问题原因&#xff1a;ruby语言的时间直接获取的UTC时间 出现版本&#xff1a;oxidized 0.28.0 问题解决&#xff1a; docker exec -it oxidized /bin/bashvim /var/l…

网络设备配置备份-Oxidized

背景&#xff1a;网络设备如何备份&#xff1f;关于这个问题笔者尝试了多种&#xff0c;比如&#xff1a;通告FTP下载配置文件&#xff0c;通过ssh软件登录设备记录当前配置等&#xff0c;在一次偶然的机会中找到了Oxidized&#xff08;开源软件&#xff09;&#xff0c;可以增…