做网站网站的推广是不是犯罪的京紫元年深圳网站建设

diannao/2026/1/26 18:25:18/文章来源:
做网站网站的推广是不是犯罪的,京紫元年深圳网站建设,wordpress导出模板,制作好的网页模板如何放入网站cms中一、完全二叉树 堆是一种完全二叉树#xff0c;什么是完全二叉树#xff1f; 简单的说#xff0c;一棵满二叉树表示的是所有节点全部饱和#xff0c;最后一层全部占满#xff1a; 而完全二叉树指的是满二叉树的最后一层#xff0c;所有叶子节点都从左往顺序排满#x…一、完全二叉树 堆是一种完全二叉树什么是完全二叉树 简单的说一棵满二叉树表示的是所有节点全部饱和最后一层全部占满 而完全二叉树指的是满二叉树的最后一层所有叶子节点都从左往顺序排满 完全二叉树的特点非常简单除了最后一层其他各层节点都是满的而最后一层所有节点从左往右依次排满。它并不关心节点元素的大小只与这一结构特点有关。 二、堆结构 前面说到堆是一种特殊的完全二叉树除了符合完全二叉树的结构特点它还有另一个特性由这个特性我们又可以将堆分为——大根堆、小根堆。 大根堆每个节点比它的子节都要大。 小根堆和大根堆相反每个节点比它的子节点都要小。 注意堆只关心父节点与子节点之间的大小要么父节点比子节点都大视为大根堆要么父节点比子节点都小视为小根堆。只要保证这一点再加上完全二叉树的特点就是一个堆结构。至于全部节点是否呈现一种左大右小或左小右大的关系堆并不关心。 如何实现一个堆 堆并不是一个实际存在的物理结构它需要通过一个一维数组来表示。实际上数组表示了堆的一种对应关系。 有了这样一种对应关系我们可以得到下面 3 个公式 已知任意位置 index求其父节点和子节点位置 父节点int fatherIdx (index - 1) / 2; // 注意 (0 - 1) / 2 0实际上double-int 是向0取整或绝对值向下取整。 左子节点int leftIdx index * 2 1; 右子节点int rightIdx index * 2 2; 例如4 位置的父节点是 1 位置(4 - 1) / 2 1 向下取整。 有了位置关系剩下的工作就是实现大根堆或小根堆一般情况大根堆可以快速返回整个堆中的最大值比较常用以下就以大根堆为例。 接下来我们通过代码来详细解析如何实现一个堆结构。 三、堆结构的实现 以数组为基础构建一个大根堆的对应关系。这个堆结构需要实现以下几个公共方法 push 入堆pop 出堆isEmpty 是否为空isFull 是否已满实现堆结构的过程要始终紧扣两个特点 完全二叉树的特点大根堆的特点只有这两点满足它才是一个正确的堆。 当push一个元素的时候由于实现结构是数组因此始终是追加到数组的末尾但我们可以通过特定的方法来实现“堆结构”的调整。 想象这个元素被追加到了堆结构最后一层的末尾首先完全二叉树的条件就满足了。 但是大根堆的特点呢这时就需要从末尾开始向上与父节点比大小大的站在父节点的位置然后重复这个过程直到这个元素不再比父节点大或已经站在了 0 的位置。 public void push(int value) {if (isFull())throw new RuntimeException(heap is full);heap[heapSize] value;heapInsert(heap, heapSize);}private void heapInsert(int[] arr, int index) {// 当前位置元素比父节点大交换位置重置当前位置// 循环条件有两点作用1、当前节点父节点明显// 2、由于 (0-1)/20如果index已经是0位置出现相等的情况跳出循环隐藏while (arr[index] arr[(index - 1) / 2]) {SortUtil.swap(arr, index, (index - 1) / 2);index (index - 1) / 2;}} 而如果 pop 一个元素稍微复杂一些首先我们需要记录下 0 位置上的元素然后用堆的最后一个元素补位heapSize 缩减 1 位这几步操作是为了保证取出元素后依然是一个完全二叉树。 然后我们需要从 0 位置上已经替换为最后一个位置上的数与子节点比较找到最大的子节点然后与其交换下沉循环直到下沉到“堆的最后一层”或子节点都比自己小终止条件 public int pop() {int max heap[0];// 1、要拿掉根节点因为要保证是一个完全二叉树所以第一步我们取最后一个元素补位SortUtil.swap(heap, 0, heapSize - 1);// 2、heapSize缩减一位heapSize--;// 2、再执行heapify下沉操作因为补位的元素可能不满足大根的特点所以要向下比较heapify(heap, 0, heapSize);return max;}private void heapify(int[] arr, int i, int heapSize) {int left 2 * i 1;// 若左孩子没有越界证明存在下一级有可能需要下沉while (left heapSize) {// 选出子节点中最大的那个位置int largest left 1 heapSize arr[left] arr[left 1] ? left 1 : left;largest arr[largest] arr[i] ? largest : i;if (largest i)break;else {// 执行交换SortUtil.swap(arr, largest, i);i largest;left 2 * i 1;}}} 以下是完整代码 /*** 大根堆** data 2021/5/15 16:46*/ public class Code2_MaxHeap {/*** 堆容器*/private int[] heap;/*** 元素限制*/private final int limit;/*** 堆大小*/private int heapSize;public Code2_MaxHeap(int limit) {this.heap new int[limit];this.limit limit;this.heapSize 0;}public void push(int value) {if (isFull())throw new RuntimeException(heap is full);heap[heapSize] value;heapInsert(heap, heapSize);}/*** 1、因为是数组表示的堆结构每次插入都是在末尾因此index每次都是堆的最后一个值* 2、利用堆结构的特点可以快速求出当前位置的父节点在数组中的下标即(index - 1)/2* 3、比较当前位置与父节点 大小如果比父大交换然后当前位置变为父节点位置* 4、重复 2、3继续向上比较要么直到没有父节点那么while的条件会在两数相等时退出要么不比父节点大也停止向上比较。*/private void heapInsert(int[] arr, int index) {// 当前位置元素比父节点大交换位置重置当前位置while (arr[index] arr[(index - 1) / 2]) {SortUtil.swap(arr, index, (index - 1) / 2);index (index - 1) / 2;}}public int pop() {int max heap[0];// 1、要拿掉根节点因为要保证是一个完全二叉树所以第一步我们取最后一个元素补位SortUtil.swap(heap, 0, heapSize - 1);// 2、heapSize缩减一位heapSize--;// 2、再执行heapify下沉操作因为补位的元素可能不满足大根的特点所以要向下比较heapify(heap, 0, heapSize);return max;}private void heapify(int[] arr, int i, int heapSize) {int left 2 * i 1;// 若左孩子没有越界证明存在下一级有可能需要下沉while (left heapSize) {// 选出子节点中最大的那个位置int largest left 1 heapSize arr[left] arr[left 1] ? left 1 : left;largest arr[largest] arr[i] ? largest : i;if (largest i)break;else {// 执行交换SortUtil.swap(arr, largest, i);i largest;left 2 * i 1;}}}public boolean isEmpty() {return heapSize 0;}public boolean isFull() {return heapSize heap.length;}} 测试代码 public static void main(String[] args) {int value 1000;int limit 100;int testTimes 1000000;for (int i 0; i testTimes; i) {int curLimit (int) (Math.random() * limit) 1;Code2_MaxHeap my new Code2_MaxHeap(curLimit);RightMaxHeap test new RightMaxHeap(curLimit);int curOpTimes (int) (Math.random() * limit);for (int j 0; j curOpTimes; j) {if (my.isEmpty() ! test.isEmpty()) {System.out.println(Oops!);}if (my.isFull() ! test.isFull()) {System.out.println(Oops!);}if (my.isEmpty()) {int curValue (int) (Math.random() * value);my.push(curValue);test.push(curValue);} else if (my.isFull()) {if (my.pop() ! test.pop()) {System.out.println(Oops!);}} else {if (Math.random() 0.5) {int curValue (int) (Math.random() * value);my.push(curValue);test.push(curValue);} else {if (my.pop() ! test.pop()) {System.out.println(Oops!);}}}}}System.out.println(finish!);}/*** 遍历数组选出一个最大值 pop* 用于验证与自定义MaxHeap.pop的值是相等的。*/ class RightMaxHeap {private int[] arr;private final int limit;private int size;public RightMaxHeap(int limit) {arr new int[limit];this.limit limit;size 0;}public boolean isEmpty() {return size 0;}public boolean isFull() {return size limit;}public void push(int value) {if (size limit) {throw new RuntimeException(heap is full);}arr[size] value;}public int pop() {int maxIndex 0;for (int i 1; i size; i) {if (arr[i] arr[maxIndex]) {maxIndex i;}}int ans arr[maxIndex];arr[maxIndex] arr[--size];return ans;} } 如果一个堆的某个位置的数变了还不知道变大还是变小如何重新调整堆结构 这个位置 i 顺序调用一下 heapinsert 和 heapify 整个堆就会自动整理好。 四、优先级队列与堆 java.util.PriorityQueueT  是一个优先级队列数据结构它的底层实现就是用堆来完成的。另外它是允许添加重复元素的这与 TreeMap 不允许添加重复元素有区别。 这种结构可以立刻返回最大值或最小值指定一个比较器参考《比较器的使用》符合“正减升反减降”的口诀。如果是按升序设定比较器那么 peek 或 poll 方法就会返回最小值。反之就是最大值。 public static void main(String[] args) {// 小根堆PriorityQueueInteger heap new PriorityQueue((o1, o2) - o1 - o2);heap.add(5);heap.add(5);heap.add(5);heap.add(3);// 5 , 3System.out.println(heap.peek());heap.add(7);heap.add(0);heap.add(7);heap.add(0);heap.add(7);heap.add(0);System.out.println(heap.peek());while (!heap.isEmpty()) {System.out.println(heap.poll());}} 五、堆的时间复杂度 堆结构的时间复杂度主要是看 heapInsert 和 heapify 两个方法。 它们的操作始终与树的高度紧密相关每次只有一个节点调换整体是复杂度都是 O(logN)。

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

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

相关文章

饿了么网站做要多少钱视频网站空间

前言:最近比较忙,很久没有翻看知网论文了,看了下yolo改进相关的论文发现基于YOLOv5改进的核心期刊论文还是层出不穷,并没有因为已经是2024年了YOLOv9的出现而导致论文不好发,同时YOLOv8的论文也出了不少,所…

上海多语种建站北京智能网站建设哪里有

近日在Ubuntu上安装了一个 MySQL 5.0,因为使用 phpMyAdmin 还必须安装 PHP,所以打算直接使用远程管理工具Navicat for MySQL 来连接。在 Ubuntu 中通过 mysql 命令行创建好一个数据表并分配了权限:代码如下:GRANT ALL ON testdb.* TO usera I…

做网页链接网站建设部标准规范网站

目录 一、数据卷 1.1、简介 1.2、用途 1.3、特性: 1.4、数据卷相关操作 1.5、使用情况 二、自定义镜像Dockerfile 2.1、Dockerfile 2.1、使用情况 2.3、具体操作 a、自定义centos 创建文件 编辑内容 制作镜像 测试 b、自定义tomcat 创建文件 编…

网站建设前提做静态网站软件

何时使用子查询?给出一个使用子查询的SQL示例,并解释其工作原理。 子查询,也称为内部查询或嵌套查询,是嵌入在另一个SQL查询中的查询。外部查询,有时称为外部查询或主查询,是包含子查询的查询。子查询可以…

安装php网站网络推广公司推荐

构建高效网络应用:探索分布式系统和微服务的利器 前言 在当今的互联网时代,构建可扩展且可靠的网络应用变得越来越重要。分布式系统和微服务架构成为了解决大规模应用程序开发和管理的有效方法。本文将介绍一些用于构建分布式系统和微服务的关键工具和…

如何做一个免费的网站怎么制作免费网站教程视频

通常数据库分为关系型数据库和非关系型数据库,关系型数据库的优势到现在也是无可替代的,比如MySQL、SQL Server、Oracle、DB2、SyBase、Informix、PostgreSQL以及比较小型的Access等等数据库,这些数据库支持复杂的SQL操作和事务机制&#xff…

免费推广网站搭建郴州装修公司排名前十口碑推荐

最近在调试程序的时候无意间看到 cookie 的过期时间是 session,这个 session 表示的是什么时候过期?牵扯出来另一个存储方案 sessionStorage 存储的数据又是什么时候过期呢? 在查找相关资料的时候总会看到会话结束的时候 cookie 会被清除&am…

开奖网站怎么做wordpress ping百度

1.强大好用的Shell Shell是一个命令工具。Shell(也称终端或壳)充当的是人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端,它会调用相应的程序服务去完成某些工作。 现在红帽系统在内的许多主流Lin…

网站的邀请怎么做的软件开发项目经理的工资一般多少

本篇文章给大家带来的内容是关于如何使用纯CSS实现小球跳跃台阶的动画效果(附源码) ,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。效果预览源代码下载https://github.com/comehope/front-end-daily-challenges代码解读定义…

毕业设计医院网站设计怎么做国内最大的域名交易平台

一:squid简介: Squid是一种在Linux系统下使用的优秀的代理服务器软件。Squid是一个缓存internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,它向…

设计经典网站凡客网站建设

java 验证码透明背景因此,我有一个幼稚的想法,即除了证书有效性检查(在Java中)之外,将证书透明性验证作为每个请求的一部分也很容易。 牺牲了整个周末的一半时间,我可以证明这并不是一件小事。 但是&#…

创建网站代码网站建设的目的和意义

一、引言 在软件设计中,设计模式是解决常见问题的最佳实践。它们提供了一种重用设计的方法,使得代码更易于理解、维护和扩展。状态设计模式是行为设计模式的一种,它允许对象在其内部状态改变时改变其行为。当控制一个对象的状态转换条件表达…

视频制作网站都有哪些公司网站实名认证

一、物理连接 二,流程分析 电脑连接CAN分析仪,电脑通过软件USB-CAN把can十六进制数据发到CAN分析仪。CAN分析仪连接CAN转以太网设备,数据通过CAN转以太网设备后,通过网线传送到单片机。这里面,CAN转以太网设置为TCP C…

网站 手机 app上海建立网站公司

背景展示:有页码的操作题 背景需求: 实操课终于全部结束了,把考试内容(docx)都写好了 【办公类-21-10】三级育婴师 视频转文字docx(等线小五单倍行距),批量改成“宋体小四、1.5倍行…

潜江做网站文化传媒公司广告宣传

Windows 11已经向全世界的客户推出,自从它问世以来已经收到各种有趣的更新。例如,Windows 11的22H2版本(操作系统的第一个大更新)为文件资源管理器添加了标签,启用了任务栏的拖放支持,以及更多。Windows-11…

做网站的前景如何wordpress邮件联系

分享 NVIDIA 基于 GPU 的 TTS 解决方案介绍。 1. 基于 FastPitchHifi-GAN 的 Streaming TTS 效果优化 NVIDIA 在 TTS 领域也做了一些供大家参考的工作,例如提供了高效的流式 TTS 部署方案,利用 TensorRT 加速模型推理速度,并通过 Triton Inf…

湖南衡阳网站建设开公司要多少钱才能注册

题目描述: 提取字符串中的最长合法简单数学表达式,字符串长度最长的,并计算表达式的值。如果没有,则返回0 简单数学表达式只能包含以下内容 0-9数字,符号 +-* 说明: 1. 所有数字,计算结果都不超过long 2. 如果有多个长度一样的,请返回第一个表达式的结果 3. 数学表达式…

大连网站开发需要多少钱四川建设网官网app

文章目录 0 前期教程1 概述2 matplotlib2.1 库导入2.2 图片的各个部分解释2.3 代码风格2.4 后端 3 集成matplotlib图像到pyqt界面中3.1 使用到的模块3.2 理解Qt Designer中的“控件提升”3.3 界面与逻辑分离的思路3.4 扩展 0 前期教程 【PyQt】PyQt5进阶——串口上位机及实时数…

杭州网站建设杭州沃迩夫做水暖的网站

备忘录模式 一、概述二、结构三、案例实现(一)“白箱”备忘录模式(二)“黑箱”备忘录模式 四、优缺点五、使用场景 一、概述 备忘录模式提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤&…

中国电信视频app下载东莞百度快照优化排名

问:three.js是当前主流的网页3d开发框架,但three.js的editor功能比较粗糙。国内有没有比较容易上手功能类似Unity3D的网页3D编辑软件,可以通过实体组件系统来完成程序扩展,简单拖拉拽完成3D场景、常用特效和用户交互的构建&#x…