数据结构-二叉树-堆(二)
一、建堆的时间复杂度问题
1、除了向上调整建堆,我们还可以向下调整建堆。不能在根上直接开始向下调整。这里的条件就是左右子树必须都是大堆或者小堆。我们可以倒着往前走,可以从最后一个叶子开始调整。但是从叶子开始调整没有意义。所以我们可以从倒数的第一个的非叶子开始调整。也就是最后一个叶子的父亲节点开始向下调整建堆。一层一层向上进行向下调整建堆,把大的数字往上调小的数字往下沉。那么问题来了怎么找到最后一个叶子的父亲节点。
我们先可以求出最后一个孩子的下标然后应用公式 parent = (child-1)/ 2 算出最后一个孩子的父亲节点的下标。
void HeapSort(int* a,int n)
{//首先建立大堆/*for (int i = 1; i < n; i++){UpAdjust(a, i);}*///向下调整建堆的效率要比向上调整建堆的效率要高for (int i = (n - 1 - 1) / 2; i >= 0; i--){DownAdjust(a, i, n);}//交换堆头和堆尾的数字选出最大的数字放到堆尾//然后向下调整int end = n - 1;while (end > 0){Swap(&a[end], &a[0]);DownAdjust(a, 0, end);end--;}
}
2、向下调整和向上调整建堆的时间复杂度
向下调整:倒数第二层有2^(h-2) 个节点
建堆的调整的次数
错位相减法算出时间复杂度
每层节点个数 × 这一层最坏向下调整多少次
最后的结果为:
、
所以时间复杂度为O(N) T(N) = N - h。
向上调整:
再次使用上面的错位相减法
所以时间复杂度为O(NlogN)。
因为向下调整的过程中节点多的调整的次数少,节点少的调整的次数多。向上调整的过程中节点少的调整的次数少,节点多的调整的次数多
排序调堆的时间复杂度也是O(NlogN)。
TOPK 问题
1、建N个数的大堆,再Pop k次就可以了。
2、加入N很大呢?N是100亿呢? K == 50
1G大约十亿字节。所以是40G左右
内存中存不下,数据是在磁盘文件中。
我们可以用100亿个数中的K个数建立一个小堆。遍历剩下的数据,如果这个数据比堆顶的数据大,就替代它进堆(向下调整)最后这个小堆的数据就是最大的前K个。
void HeapTopK(int* a, int n, int k)
{//首先向下调整建堆int* topk = (int*)malloc(sizeof(int) * k);//从a数组里读for (int i = 0; i < k; i++){topk[i] = a[i];}//建立小堆for (int i = (k - 1 - 1) / 2; i >= 0; i--){DownAdjust(topk, i, k);}//遍历剩下的数如果大于堆顶的数据我们就让它进堆并向下调整for (int i = k + 1; i < n; i++){if (a[i] > topk[0]){topk[0] = a[i];DownAdjust(topk, 0, k);}}
}
相关文章:
数据结构-二叉树-堆(二)
一、建堆的时间复杂度问题 1、除了向上调整建堆,我们还可以向下调整建堆。不能在根上直接开始向下调整。这里的条件就是左右子树必须都是大堆或者小堆。我们可以倒着往前走,可以从最后一个叶子开始调整。但是从叶子开始调整没有意义。所以我们可以从倒数…...
身份证二要素核验介绍及使用方法
一、身份证二要素核验简介及重要性 身份证二要素核验是一种重要的身份验证技术,它在现代社会中发挥着至关重要的作用,特别是在涉及个人信息安全和隐私保护的领域。通过身份证二要素核验,我们可以有效地确认个人身份的真实性,从而…...
探索 去中心化的Web3.0
随着区块链技术的日益成熟和普及,Web3(Web 3.0)已经成为一个无法忽视的趋势。Web3不仅仅是一个技术概念,更是一个去中心化、透明、用户数据拥有权归还给用户的互联网新时代。在这篇文章中,我们将深入探讨Web3技术的核心…...
递归的层序遍历
最近遇到一个业务需求:一颗依赖树,其实就是一颗递归树,如何一层一层的数据放在一起,可以近似理解为二叉树的层序遍历。 业务理解为递归树的层序遍历 代码示例: public class RecursionErgodic {public static void…...
pytest使用 pytest-rerunfailures 插件实现失败用例重跑功能
使用 pytest 进行测试时,你可以通过安装并配置 pytest-rerunfailures 插件来实现失败用例重跑功能。以下是一个示例说明: 假设你有一个测试文件 test_example.py 包含如下测试用例: import pytestpytest.mark.parametrize("num",…...
2024/4/23 C++day1
有以下定义,说明哪些量可以改变哪些不可以改变? const char *p; 指针可以改变 值不可以改变 const (char *) p; 语法错误 char *const p; 指针不可以改变 值可以改变 const char* const p; 指针和值…...
OpenHarmony鸿蒙南向开发案例:【智能窗户通风设备】
样例简介 本文档介绍了安全厨房案例中的相关智能窗户通风设备,本安全厨房案例利用轻量级软总线能力,将两块欧智通V200Z-R/BES2600开发板模拟的智能窗户通风设备和燃气告警设备组合成。当燃气数值告警时,无需其它操作,直接通知软总…...
解析‘找不到vcruntime140.dll,无法继续执行代码’的异常修复方法
找不到vcruntime140.dll,无法继续执行代码?这是小事情,这个情况主要是vcruntime140.dll文件丢失了,导致一些程序没办法正常的运行,我们只要修复好这个vcruntime140.dll,文件就可以了。下面一起来了解一下。 一.找不到vcruntime140…...
Golang对接Ldap(保姆级教程:概念搭建实战)
Golang对接Ldap(保姆级教程:概念&搭建&实战) 最近项目需要对接客户的LDAP服务,于是趁机好好了解了一下。LDAP实际是一个协议,对应的实现,大家可以理解为一个轻量级数据库。用户查询。比如ÿ…...
Java23种设计模式-创建型模式之工厂方法模式
工厂方法模式(Factory Method Pattern) 一种创建型设计模式,它定义了一个用于创建对象的接口,让子类决定将哪一个类实例化,从而将产品的实例化推迟到子类中。这种模式的主要角色包括: 角色1:抽…...
Oracle故障处理:ORA-00600错误处理思路
提前说明: 该故障,我只是旁观者。 但处理该故障的DBA工程师,思路很清晰,我非常受教!在此也将经验分享。 目录 项目场景 问题分析 优化建议 项目场景 在某项目数据库运维群,有现场同事发了张报错截图如下…...
微信小程序使用 Vant Weapp 中 Collapse 折叠面板 的问题!
需求:结合Tab 标签页 和 Collapse 折叠面板 组合成显示课本和章节内容,并且用户体验要好点! 如下图展示: 问题:如何使用Collapse 折叠面板 将内容循环展示出来? js中的数据是这样的 代码实现࿱…...
论文写作神器:用ChatGPT写论文的5大高效技巧
在人工智能日渐成熟的今天,ChatGPT已经成为学术界、业界乃至日常生活中不可或缺的工具之一。尤其是对于学生和研究人员而言,ChatGPT能大幅度提高论文写作的效率和质量。然而,许多人尚未掌握如何高效利用这一工具,很多人用chatgpt写…...
微信小程序展示倒计时
html <view class"countdown"> <text>倒计时:</text> <text wx:for"{{countdown}}" wx:key"index">{{item}}</text> </view> ts data: {countdown: [], // 存放倒计时数组 targetTime:…...
什么是用户体验(UX)文案,为什么它很重要?
网上购物如今比以往任何时候都更加相关。所以我们将以此为例说明什么是用户体验(UX)文案,以及为什么它很重要。 假设你去了一个在线商店。你需要执行一系列操作: 找到合适的部分选择你感兴趣的产品弄清楚它们是什么,…...
算法06链表
算法06链表 一、链表概述1.1概述1.2链表的组成部分:1.3链表的优缺点: 二、链表典例力扣707.设计链表难点分析:(1)MyLinkedList成员变量的确定:(2)初始化自定义链表:&…...
第十七章 数据管理和组织变革管理
17.2 变革法则 1)组织不变革,人就变。 2)人们不会抗拒变革,但抵制被改变。 3)事情之所以存在是惯性所致。 4)除非有人推动变革,否则很可能止步不前。 5)如果不考虑人的因素…...
基于harris角点和RANSAC算法的图像拼接matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022a 3.部分核心程序 ....................................................................... I1_harris fu…...
C++感受6-Hello World 交互版
变量、常量输入、输出、流getline() 函数读入整行输入Hello() 函数复习新定义函数 Input() 实现友好的人机交互还有 “痘痘” 为什么挤不到的分析…… 1. DRY 原则简介 上一节课,我们写了两版“问候”程序。第一版的最大问题是重复的内容比较多,每一次问…...
02_c/c++开源库ZeroMQ
1.安装 C库 libzmq sudo apt install libzmq3-dev 实例: https://zeromq.org/get-started/?languagec&librarylibzmq# 编译依赖: pkg-config --cflags --libs libzmq or cat /usr/lib/x86_64-linux-gnu/pkgconfig/libzmq.pc -isystem /usr/include/mit-krb5 -I/usr/in…...
计算机视觉 CV 八股分享 [自用](更新中......)
目录 一、深度学习中解决过拟合方法 二、深度学习中解决欠拟合方法 三、梯度消失和梯度爆炸 解决梯度消失的方法 解决梯度爆炸的方法 四、神经网络权重初始化方法 五、梯度下降法 六、BatchNorm 七、归一化方法 八、卷积 九、池化 十、激活函数 十一、预训练 十二…...
【MHA】MySQL高可用MHA源码1-主库故障监控
1 阅读之前的准备工作 1 一个IDE工具 ,博主自己尝试了vscode安装perl的插件,但是函数 、变量 、模块等都不能跳转,阅读起来不是很方便。后来尝试使用了pycharm安装perl插件,阅读支持跳转,自己也能写一些简单的测试样例…...
如何一键清除文件目录下所有的node_modules
如何一键清除文件目录下所有的node_modules 快速删除目录下的node_modules,下面附上windows和mac的脚本指令 windows脚本 FOR /d /r . %d in (node_modules) DO IF EXIST "%d" rm -rf "%d"mac脚本 find . -name "node_modules" -…...
【产品经理修炼之道】- 导航架构设计
目录 一、导航是什么 二、导航的作用 三、导航的分类 四、导航菜单的广度与深度 五、导航的颜色 六、导航的形态 七、导航的研究 八、导航的设计 九、导航改版案例分享 总结 每个网页的设计都需要包括导航,那么导航架构该如何设计?作者结合之前…...
本地部署和运行大型语言模型(Large Language Models, LLMs)的工具Ollama
文章目录 本地部署和运行大型语言模型(Large Language Models, LLMs)的工具Ollama背景什么是Ollama主要功能优势 使用场景Ollama LangChain 实现本地运行Llama 3 本地部署和运行大型语言模型(Large Language Models, LLMs)的工具…...
Python-100-Days: Day01
Day01 Python简介 1.1989年Guido von Rossum在圣诞节之夜开始着手python语言编译器的编写。 2.1991年2月 Python v1 编译器诞生,使用C实现的,此时可以调用C的库函数。 3.1994年1月,Python v1.0 正式版发布。 4.2000年10月16日࿰…...
g 对象:Flask 应用中的“临时口袋”
文章目录 g对象的理解Flask 中的 g 对象g 对象的特点:使用 g 对象: 示例 g对象的理解 想象一下,你在逛超市。你需要一个购物篮来装你挑选的商品。这个购物篮就像 Flask 应用中的 g 对象,它是一个临时存放东西的地方,方便你在购物过程中随时取…...
JavaEE初阶——多线程(七)——定时器
T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 小比特 大梦想 此篇文章与大家分享多线程的第七篇文章——关于定时器 如果有不足的或者错误的请您指出! 目录 4.定时器4.1标准库提供的定时器4.2自己实现一个定时器4.2.1任务类4.2.2Timer类4.2.3 有一个线程来负…...
嵌入式4-24
作业: 整理思维导图 定义一个矩形类Rec,包含私有属性length,width,有以下成员函数: void set_length(int l); //设置长度 void set_width(int w); //设置宽度 int get_length(); //获取长度 int get_width(); //获取宽…...
跟我学C++中级篇——临时对象
一、临时对象 Temporary object,临时对象。一听名字就明白,这个对象的意义不大,只是临时中转一下或者存在一下,有的可能连个存在感都刷不到就消失了。但不要小看这种临时对象,对C/C这种以效率严苛为前提的编程环境下&…...
【S32K3 MCAL配置】-7.1-GPT Driver:定时器中断-创建一个周期执行的任务
"><--返回「Autosar_MCAL高阶配置」专栏主页--> 案例背景:常用于周期点亮/关闭一个LED灯;或者精度一般的占空比为50% PWM方波;或者周期调用一个函数,在该函数中我们可以执行一些软件策略(简易的OS)。 目录(共15页精讲,基于评估板: NXP S32K312EVB-Q172,…...
java可盈保险合同管理系统的设计与实现(springboot+mysql源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的可盈保险合同管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于Spring Boot的…...
【智能算法】囊状虫群算法(TSA)原理及实现
目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2020年,S Kaur等人受到囊状虫群自然行为启发,提出了囊状虫群算法(Tunicate Swarm Algorithm, TSA)。 2.算法原理 2.1算法思想 TSA模拟了囊状虫群在导…...
python基础——正则表达式
📝前言: 这篇文章主要想讲解一下python中的正则表达式: 1,什么是正则表达式 2,re模块三匹配 3,元字符匹配 4,具体示例 🎬个人简介:努力学习ing 📋个人专栏&am…...
T1级,生产环境事故—Shell脚本一键备份K8s的YAML文件
大家好,我叫秋意零。 最近对公司进行日常运维工作时,出现了一个 T1 级别事故。导致公司的“酒云网”APP的无法使用。我和我领导一起搞了一个多小时,业务也停了一个多小时。 起因是:我的部门直系领导,叫我**删除一个 …...
C语言程序设计:预处理命令
预处理命令 基础知识 预处理命令简介 C语言的预处理命令是指编译之前由预处理器执行的指令,用于在源代码中进行一些预处理操作。 常见预处理命令 (1) #define 定义一个宏,用于替换源代码中的标识符为指定的文本。 #define MAX_NUM 100 int arr[MAX_NU…...
C++ 中的 struct 和 Class
通常struct用于表示一组相关的数据,而Class用于表示一个封装了数据和操作的对象。如果只是用于来组织一些数据,而不涉及复杂的封装和继承关系,则struct更为直观;如果需要封装、继承等面向对象编程的特性,可以选择使用C…...
基于Qt的二维码生成与识别
基于Qt的二维码生成与识别 一、获取QZxing开源库 1.通过封装的QZxing开源库生成和识别二维码,下载地址:GitCode - 开发者的代码家园https://gitcode.com/mirrors/ftylitak/qzxing/tree/master。 2.下载解压后,使用Qt Creator xx࿰…...
docker 基本命令
目录 一、docker 镜像操作命令 1.1.查询软件镜像 1.2.docker pull:下载镜像 1.3.docker push:上传镜像 1.4.docker images:查看本地镜像 1.5.docker inspect :获取镜像详细信息 1.6.docker tag:添加镜像标签 …...
h5键盘弹出收起时引起的页面变化
h5键盘弹出收起时引起的页面变化 键盘弹出时会导致窗口发生变化,置于底部的操作项会被顶上来,所以在键盘弹出的时候处理一下页面节点 通过监听页面窗口大小变化判断键盘状态键盘弹出时隐藏底部操作项在页面加载完成时执行即可 export function keyboa…...
Redis入门到实战教程(基础篇)笔记
教学来源: Redis课程介绍导学_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1cr4y1671t?p1一、Redis 入门 1.认识NoSQL 2.Redis在虚拟机中的安装和开机自启 Redis在虚拟机中安装和配置开机自启-CSDN博客https://blog.csdn.net/qq_69183322/article/deta…...
启动MySQL服务
在 Windows 系统上: 首先,找到 MySQL 安装目录,一般默认是在 C:\Program Files\MySQL 文件夹下。进入该目录下的 bin 文件夹。找到 mysqld.exe 文件,双击运行它。 在 Linux 系统(以 CentOS 为例)ÿ…...
Windows上构建 Chisel-Bootcamp
windows环境构建本地Chisel-Bootcamp 安装摘要Chisel-boocamp环境搭建安装java安装Anaconda安装scala 下载Chisel-bootcamp 环境Reference 安装摘要 在windows上安装chisel-boocamp,与linux过程类似。 安装java8安装anaconda安装scala下载Chisel-bootcamp环境 Ch…...
Spring Bean依赖注入-Spring入门(二)
1、SpringBean概述 在Spring中,一切Java对象都被视为Bean,用于实现某个具体功能。 Bean的依赖关系注入的过程,也称为Bean的装配过程。 Bean的装配方式有3种: XML配置文件注解Java类 Spring中常用的两种装配方式分别是基于XML的…...
java中spring底层核心原理解析(1)
相关系列 java中spring底层核心原理解析(2)-CSDN博客 总起 本章主要是讲以下的内容 Bean的生命周期底层原理依赖注入底层原理初始化底层原理推断构造方法底层原理 先看spring入门代码: ClassPathXmlApplicationContext context new ClassPathXmlApplicationCo…...
Neo-reGeorg明文流量
Neo-reGeorg 1 同IP对,同一个URI,第一个TCP流是“GET”请求,随后的TCP流请求为“POST”。(jsp\jspx\php) 2 第一个TCP流中,GET只有一个会话。(jsp\jspx\php),响应body79…...
科技渔业,智慧守护:4G+北斗太阳能定位终端准确定位,防拆卸报警,夯实渔业管理水平
如何高效地管理渔船,有效监控禁渔区域,4G北斗太阳能定位终端应运而生,成为渔业管理的重要应用工具。 我国作为全球渔业的重要国家,渔业一直是沿海地区传统的支柱产业,对经济的繁荣和民生的稳定起着至关重要的作用。因…...
【Elasticsearch】Elasticsearch 从入门到精通(二):基础使用
《Elasticsearch 从入门到精通》共包含以下 2 2 2 篇文章: Elasticsearch 从入门到精通(一):基本介绍Elasticsearch 从入门到精通(二):基础使用 😊 如果您觉得这篇文章有用 ✔️ 的…...
基于DEAP数据集的四种机器学习方法的情绪分类
在机器学习领域,KNN(K-Nearest Neighbors)、SVM(Support Vector Machine)、决策树(Decision Tree)和随机森林(Random Forest)是常见且广泛应用的算法。 介绍 1. KNN&am…...
离散数学之一阶逻辑基本概念与等值演算思维导图+大纲笔记(期末复习,考研,学习笔记,知识点总结)
大纲笔记 基本概念 一阶逻辑命题符号化 个体词 个体常项 个体变项 个体域 个体总域 谓词 谓词常项 谓词变项 零元谓词 特性谓词 引入规则 量词 全称量词 存在量词 一阶逻辑1公式及解释 基本概念 原子公式 谓词公式 自由变元与约束变元 自由变元 换名规则 约束变元 带入规则 闭…...
Oracle中全量CHECKPOINT和增量CHECKPOINT的区别与作用
全量CHECKPOINT和增量CHECKPOINT对用户都是透明的,而增量CHECKPOINT只不过是将全量CHECKPOINT要写的脏块分时间分批次写到数据文件中而已,此操作可以极大地减少对数据库性能的影响。 全量CHECKPOINT 全量CHECKPOINT是指DBWR进程将脏缓冲区列表中的脏块一…...
高斯分布应用;高斯分布和高斯核有什么;正态分布的具体应用举例说明
目录 高斯分布应用 高斯分布和高斯核有什么 正态分布的具体应用举例说明 高斯分布应用...
C#【进阶】泛型
1、泛型 文章目录 1、泛型1、泛型是什么2、泛型分类3、泛型类和接口4、泛型方法5、泛型的作用思考 泛型方法判断类型 2、泛型约束1、什么是泛型2、各泛型约束3、约束的组合使用4、多个泛型有约束思考1 泛型实现单例模式思考2 ArrayList泛型实现增删查改 1、泛型是什么 泛型实现…...
pg数据库的热备
Pg数据库主从复制 前言:公司的一台服务器因为断电导致系统损坏,经过3天的抢修,将服务器和数据恢复。为了避免数据的丢失,先将数据备份,并进行高可用。 采用技术:keepalivedpg 后期并实现zabbix…...
2024 手把手教你MathType 7.8中文破解版详细安装激活图文教程
MathType 7.8中文破解版是一款全球最受欢迎的专业数学公式编辑器工具软件,MathType可视化公式编辑器轻松创建数学方程式和化学公式.兼容Office Word,PowerPoint,Pages,Keynote,Numbers等700多种办公软件,用于编辑数学试卷,书籍,报刊,论文,幻灯演示等文档轻松编写各种复杂的物理…...
仿C#或Java基础类型自定义
class Int{ private:int _value 0; public:operator int() const{ // 隐式转换return _value;}// 显式转换explicit operator int*() const { return nullptr; }operator(const int page){_value page;}operator float() const{return static_cast<float>(_value);}ope…...
ORACLE ADG 参数详解
1.DB_NAME:在主库上指定创建数据库时使用的名称。在物理备库上,使用主库的DB_NAME。 2.DB_UNIQUE_NAME:数据库唯一名,此参数决定了数据库服务名,服务名随唯一名的改变而改变。在ADG搭建过程中,数据库唯一名具有重要作用。 3.LOG…...
WebApp 使用post-css实现移动端适配
1、npm安装 post-css npm i postcss autoprefixer postcss-pxtorem -D2、新建配置文件 postcss.config.js /* eslint-env node */module.exports {plugins: {autoprefixer: {overrideBrowserslist: [Android > 4.0, iOS > 7]},postcss-pxtorem: {// 根节点的 fontSize…...
位图和布隆过滤器:位图
在《unordered_map 和 unordered_set》 中提到过: 哈希是一种思想,通过哈希函数将数据转化为一个或多个整型 —— 映射关系;通过这种映射关系,可以做到以 O(1) 的时间复杂度查找数据。 本文即将介绍的 位图 和 布隆过滤器 就是两个…...
前端简史之崛起:Router迁鼎
引 💡 Ajax 的出现,带来了 jQuery 时代;Node技术的发展,带来了前端工程化进阶;如果说前面二者是带来技术的革命,那么前端路由方案的多样化则带来了用户体验的升级以及项目管理的优化。 课程简介 《前端简史…...
pytorch_trick(2) 在Jupyter初始化过程中自动加载常用包的设置方法
一、在Jupyter初始化过程中自动加载常用包的设置方法 在每一节课程的开头,我们都要导入常用包,由于这项工作重复而固定,因此我们也可以通过配置jupyter(准确来说应该是ipython)的startup文件,来使得每次新创…...
Vue的学习 —— <路由与网络请求>
目录 前言 正文 一、初识路由 二、初识Vue Router 1、安装Vue Router 2、Vue Router基本使用 三、路由重定向 四、嵌套路由 前言 在之前的学习中了解到单页Web应用通常只有一个HTML页面,所有的组件展示和切换都在这个页面上完成。虽然我们可以通过动态组件…...