当前位置: 首页 > news >正文

算法笔记:堆

【如无特别说明,皆为最小二叉堆】

1 介绍

2 特性

  • 结构性:符合完全二叉树的结构
  • 有序性:满足父节点小于子节点(最小化堆)或父节点大于子节点(最大化堆)

3 二叉堆的存储

顺序存储

二叉堆的有序性可以很容易地通过下标来反映

4 堆中插入新元素

  • 堆的插入是在具有最大序号的元素之后插入新的元素或结点,否则将违反堆的结构性。
  • 如果新元素放入后,没有违反堆的有序性,那么操作结束。
  • 否则,让该节点向父节点移动,直到满足有序性或到达根节点。
  • 新节点的向上移动称为向上过滤

4.1 时间效率

  • 最坏情况是O(logn) 【一直交换到根节点】
  • 平均情况,过滤会提前结束。
    • 有资料表明,平均是2.6次比较,因此元素平均上移1.6层。

5 推出操作(DeQueue)

  • 当最小元素被删除时,在根上出现了一个空结点。堆的大小比以前小1,堆的结构性告诉我们,最后一个结点应该删掉。
  • 如果最后一项可以放在此空结点中,就把它放进去。然而,这通常是不可能的
  • 必须玩与插入操作类似的“游戏”:把某些项放入空结点,然后移动空结点。
    • 仅有的区别在于:对DeQueue操作,空结点是往下移动。

  • 找到空结点的一个较小的子结点,如果该儿子的值小于我们要放入的项,则把该儿子放入空结点,把空结点往下推一层
    • 重复这个动作,直到该项能被放入正确的位置。

5.1 时间复杂度

  • 最坏情况下,deQueue是一个对数时间的操作
  • 根据堆的有序性,堆中最后一个结点的值一般都是比较大的。因此,向下过滤很少有提前一或二层结束的,所以deQueue操作平均也是对数时间

6 建堆

  • 可以看成N次连续插入,其时间应该是在O(NlogN)时间内完成

  • 事实上,在构造过程中,我们并不关心每个元素加入后堆的状态,我们关心的是N个元素全部加入后的最后状态,最后的状态是要保证堆的有序性。至于中间过程中的有序性是否成立并不重要。
  • 有了这个前提后,我们能将构造堆的时间复杂度降到O(N)
    • 利用堆的递归定义
      • 如果函数buildHeap可以将一棵完全二叉树调整为一个堆 ,那么,只要对左子堆和右子堆递归调用buildHeap。
      • 至此,我们能保证除了根结点外,其余的地方都建立起了堆的有序性。
      • 然后对根结点调用向下过滤,以创建堆的有序性
      • 如果我们以逆向层次的次序对结点调用向下过滤,那么在向下过滤节点i时,所有结点i的子孙都已经调用过向下过滤。
        • 不需要对叶结点执行向下过滤
        • 从编号最大的非叶结点开始向下过滤

6.1 举例

一开始根据数据的先后建立一棵完全二叉树

从序号最大的非叶子节点(30)开始进行向下过滤

 

6.2 时间分析

  •  为h的节点(叶节点高度为0),在向下过滤中交换的最大次数是h
  • 建堆的最大时间是所有节点的调整时所需交换次数之和,即所有节点的高度之和

7 D堆

  • 每个节点有d个儿子,这样生成的堆比较矮。
  • 插入:O(\log_dN)
  • 删除:需要在d个元素中找出最小的,时间复杂度为:O(\log_dN)
  • 优点:插入快
  • 缺点:删除慢
  • 用途:
    • 插入比删除多的队列
    • 队列太大,内存放不下,要放在外存的时候

相关文章:

算法笔记:堆

【如无特别说明,皆为最小二叉堆】 1 介绍 2 特性 结构性:符合完全二叉树的结构有序性:满足父节点小于子节点(最小化堆)或父节点大于子节点(最大化堆) 3 二叉堆的存储 顺序存储 二叉堆的有序…...

vue3 判断包含某个字符

<img v-if"node.level 1 && checkIfIncludeSubStr(node.label, 人口)"src"/assets/images/icon-convention-01.png" width"16"class"inlineBlock Vmiddle" style"margin-right: 8px;"/>const data reactive…...

MySQL的故事——查询性能优化

查询性能优化 文章目录 查询性能优化一、查询优化器的提示(hint)二、优化特定类型的查询 一、查询优化器的提示(hint) HIGH_PRIORITY和LOW_PRIORITY 这个提示告诉MySQL&#xff0c;当多个语句同时访问某一个表时&#xff0c;哪些语句的优先级相对高些&#xff0c;哪些相对低些…...

在外SSH远程连接macOS服务器【cpolar内网穿透】

文章目录 前言1. macOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接macOS3.1 macOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接macOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …...

Nosql数据库服务之redis

Nosql数据库服务之redis 一图详解DB的分支产品 Nosql数据库介绍 是一种非关系型数据库服务&#xff0c;它能解决常规数据库的并发能力&#xff0c;比如传统的数据库的IO与性能的瓶颈&#xff0c;同样它是关系型数据库的一个补充&#xff0c;有着比较好的高效率与高性能。 专…...

当AI遇到IoT:开启智能生活的无限可能

文章目录 1. AI和IoT的融合1.1 什么是人工智能&#xff08;AI&#xff09;&#xff1f;1.2 什么是物联网&#xff08;IoT&#xff09;&#xff1f;1.3 AI和IoT的融合 2. 智能家居2.1 智能家居安全2.2 智能家居自动化 3. 医疗保健3.1 远程监护3.2 个性化医疗 4. 智能交通4.1 交通…...

Qt5界面Qt Designer上添加资源图片后,ModuleNotFoundError: No module named ‘rcc_rc‘ 的终极解决方案

在网上找了很久都没弄明白&#xff0c;最后还是自己思考解决了。 起因&#xff1a; 用 Qt Designer 添加资源文件作为背景图&#xff0c;编译 \resource\static\qrc> pyuic5 -o .\xx.py .\xx.ui发现在 xx.py 文件末尾中多了一个语句&#xff1a; import rcc_rc然后运行就…...

社群运营怎么做?

社区运营虽然说起来简单&#xff0c;可是实际执行起来却常常发现无从下手。刑天营销曾经做过社区运营的案子&#xff0c;我们也总结一套自己的方法&#xff0c;要做好社群运营&#xff0c;以下的这些问题就不能忽视&#xff1a; 一、做好社区定位 做社区运营&#xff0c;首先…...

Vite,Vue3项目引入dataV报错的解决方法

背景:开发一个大屏项目中,需要是要DataV的那边边框,装饰等,只是DataV是基于vue2的,vue3版的作者还在开发中,于是翻了DataV的源码,发现使用esm方式时是直接引入源码而不经过打包,其源码中使用的vue语法vue3也支持,所以可以直接在vue3中引入使用. vite,vue3项目直接引入DataV 安…...

QT(8.30)常用类与组件,实现登录界面

1.作业&#xff1a; 完成一个登录界面(图片未附带): 头文件: #ifndef WIDGET_H #define WIDGET_H#include <QWidget>#include <QLineEdit>//行编辑器#include<QIcon>//图标#include<QLabel>//标签#include<QPushButton>//按钮#include<QIc…...

【Two Stream network (Tsn)】(二) 阅读笔记

贡献 将深度神经网络应用于视频动作识别的难点&#xff0c;是如何同时利用好静止图像上的 appearance information以及物体之间的运动信息motion information。本文主要有三点贡献&#xff1a; 1.提出了一种融合时间流和空间流的双流网络&#xff1b; 2.证明了直接在光流上训…...

记一次语音播报功能

浏览器本身就可以读文字 写功能前一直以为该功能得调用第三方平台的API才可以文字合成语音后用音频播放&#xff0c;原来HTML5已经支持了该功能&#xff08;TTS&#xff09;了 SpeechSynthesis 和 SpeechSynthesisUtterance SpeechSynthesis SpeechSynthesisUtterance let …...

Unity设置TextMeshPro文本超出范围显示...

TextMtshPro文本超出范围&#xff0c;展示省略。选择Overflow为Ellipsis。...

Java中级面试题记录(三)

1.职业规划&#xff1f; 2.每家公司离职原因&#xff1f; 3.SpringCloud用到了哪些组件&#xff1f; GateWayNacosOpenFeignSeataHystrix 4.PG和Mysql的区别&#xff1f; 5.两种数据库的存储区别&#xff1f; 6.MySQL索引了解的内容&#xff1f; 一口气搞定索引的所有知识…...

spring高级源码50讲-1-8(spring容器与bean)

文章目录 容器与 bean1) 容器接口演示1 - BeanFactory 与 ApplicationContext 的区别关键代码参考 收获&#x1f4a1;演示2 - 国际化 2) 容器实现演示1 - DefaultListableBeanFactory代码参考 收获&#x1f4a1;演示2 - 常见 ApplicationContext 实现代码参考 收获&#x1f4a1…...

微服务06-Dockerfile自定义镜像+DockerCompose部署多个镜像

常见的镜像在DockerHub能找到&#xff0c;但是我们自己写项目得自己构造镜像 1 镜像结构 作用&#xff1a;提高复用性&#xff0c;当应用需要更新时&#xff0c;不再是整个系统重装进行更新 &#xff0c;而是对需要更新的部分进行更新&#xff0c;其他地方不动——>这就是分…...

2023高教社杯 国赛数学建模A题思路 - 定日镜场的优化设计

1 赛题 A 题 定日镜场的优化设计 构建以新能源为主体的新型电力系统&#xff0c; 是我国实现“碳达峰”“碳中和”目标的一项重要 措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。 定日镜是塔式太阳能光热发电站(以下简称塔式电站)收集太阳能的基本组件&…...

Qt +VTK+Cmake 编译和环境配置(第二篇,中级篇, 重新编译)

1.下载VTK和Cmake 这里不介绍了。我的VTK 8.2.0 cmake 3.27.4 就是不服这编译器了。重新来一次 打开Cmake&#xff0c;把VTK源文件路径和目标路径设置一下&#xff08;目标路径自己设置&#xff0c;随意&#xff09; 点击Configure&#xff1a;。 点击下一步 选择好 Qt的gcc…...

图的学习,深度和广度遍历

一、什么是图 表示“多对多”的关系 包括&#xff1a; 一组顶点&#xff1a;通常用V&#xff08;Vertex&#xff09;表示顶点集合一组边&#xff1a;通常用E&#xff08;Edge&#xff09;表示边的集合 边是顶点对&#xff1a;(v, w)∈E&#xff0c;其中v,w∈V有向边<v, w&…...

ChatGPT驱动下,网站AI客服该如何进步和创新

在ChatGPT这个AI智能的驱动下&#xff0c;网站AI客服在进步和创新方面有很多潜力。由于GPT模型的强大语言处理能力和智能对话技巧&#xff0c;使得网站AI客服能够更准确和流畅地与用户交互。looklook今天总结了一些网站AI客服智能的进步和创新方向&#xff0c;以供大家参考。 网…...

Linux系统中实现便捷运维管理和远程访问的1Panel部署方法解析

文章目录 前言 前言 1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。高效管理,通过 Web 端轻松管理 Linux 服务器&#xff0c;包括主机监控、文件管理、数据库管理、容器管理等下面我们介绍在Linux 本地安装1Panel 并结合cpolar 内网穿透工具实现远程访问1Panel 管理…...

数学建模黄河水沙监测数据分析

数学建模黄河水沙监测数据分析 问题&#xff1a; 黄河是中华民族的母亲河。研究黄河水沙通量的变化规律对沿黄流域的环境治理、气候变化和人民生活的影响&#xff0c;以及对优化黄河流域水资源分配、协调人地关系、调水调沙、防洪减灾等方面都具有重要的理论指导意义。 解题思…...

Unity ProBuilder(自己创建斜面、拐角)

目录 基础操作 下载 打开面板 新增对象 材质保存 1.斜面实例 2.拐角实例 3.切割实例 4.单独面赋值 基础操作 下载 打开面板 新增对象 选中想创建的块体后&#xff0c;在编辑器见面拉出块体 材质保存 打开材质编辑器后&#xff0c;将材质赋值&#xff0c;之后&am…...

以气象行业为例,浅谈在ToB/ToG行业中如何做好UI设计

商业气象公司是典型的TOB/TOG性质的公司&#xff0c;客户包括农业、能源、航空航天、交通运输、建筑工程等行业&#xff0c;它们需要准确的气象数据、预报和分析来支持业务决策和运营管理。商业气象公司通常会提供各种气象服务&#xff0c;如气象数据采集与分析、预报产品、风险…...

shiny根据数据的长度设置多个色板

shiny根据数据的长度设置多个色板 library(shiny) library(colourpicker) ui <- fluidPage(# 添加一个选择颜色的下拉菜单uiOutput("color_dropdown") )server <- function(input, output) {# 数据长度data_length <- reactive({length(c("数据1"…...

2023高教社杯 国赛数学建模D题思路 - 圈养湖羊的空间利用率

1 赛题 D 题 圈养湖羊的空间利用率 规模化的圈养养殖场通常根据牲畜的性别和生长阶段分群饲养&#xff0c; 适应不同种类、不同阶段 的牲畜对空间的不同要求&#xff0c;以保障牲畜安全和健康&#xff1b;与此同时&#xff0c;也要尽量减少空间闲置所造成 的资源浪费。在实际…...

网络是如何进行通信

网络是如何进行通信的 简介 在现代社会中&#xff0c;网络已经成为我们生活中不可或缺的一部分。从上网搜索信息、在线购物到远程工作和社交媒体&#xff0c;我们几乎无时无刻不与网络保持着联系。但是&#xff0c;网络究竟是个什么玩意&#xff0c;它是如何工作的呢&#xf…...

vue3 watch watchEffect

watch & watchEffect 函数都是监听器, 用于监视数据的变化; watch 有惰性&#xff0c;watchEffect 无惰性&#xff1b;watch 需要指定具体的监视属性&#xff0c;watchEffect 不需要指定具体的监视属性和配置参数&#xff0c;会自动感知代码依赖&#xff1b;watch 能获取到…...

lintcode 1410 · 矩阵注水【BFS 中等 vip】

题目链接&#xff0c;描述 https://www.lintcode.com/problem/1410 给一个二维矩阵&#xff0c;每个grid的值代表地势的高度。水流只会沿上下左右流动&#xff0c;且必须从地势高的地方流向地势低的地方。视为矩阵四面环水&#xff0c;现在从(R,C)处注水&#xff0c;问水能否…...

软件架构设计(十) 架构评估(复审)-方法论

我们上一节讲到了为什么么要进行架构的评估, 以及架构评估有哪些质量属性,本节正式来学习架构评估的一些方法论。 再讲到架构评估之前,还需要了解几个概念,也就是风险点,非风险点,敏感点,权衡点等。 风险点:系统架构风险是指架构设计中潜在的,存在问题的架构策略所带…...

wordpress 删除分类目录/深圳搜索引擎优化收费

大家好&#xff01;我是【AI 菌】&#xff0c;一枚爱弹吉他的程序员。我热爱AI、热爱分享、热爱开源&#xff01; 这博客是我对学习的一点总结与思考。如果您也对 深度学习、机器视觉、数据结构与算法、编程 等感兴趣&#xff0c;可以关注我的动态&#xff0c;我们一起学习&…...

怎样用php做网站/百度网站流量查询

欢迎观看Illustrator教程&#xff0c;小编带大家学习Illustrator 2022的基本工具和使用技巧&#xff0c;了解如何在 Illustrator 中使用形状生成器工具和路径查找器效果以不同方式组合形状。 在本文中&#xff0c;我们将使用形状生成器工具和路径查找器组合一系列更简单的形状…...

个人网站与建设毕业论文/seo关键词推广公司

电脑桌面背景不能设置怎么办?一个好的桌面背景会让大家工作或是休闲娱乐的时候感到更加的心情愉悦&#xff0c;而且现在很多人都寻求个性化&#xff0c;系统配置的单一桌面已满足不了他们的需求&#xff0c;如何修改桌面背景成了大家考虑的问题。下面&#xff0c;我们就来看看…...

公司网站建设需要考虑什么问题/百度云盘搜索引擎入口

线性表相关&#xff1a; 线性表是一种逻辑结构&#xff0c;相同数据类型的N个数据元素的有限序列&#xff0c;除了第一个元素外&#xff0c;每个元素有且仅有一个直接前驱&#xff0c;除了最后一个元素外&#xff0c;每个元素有且仅有一个直接后继。 线性表的特点&#xff1a; …...

网站内链检测工具/如何开网站呢

登录VMware vSphere的管理界面&#xff0c;注意端口号。 按照下图进行修改即可。...

高端网站建设与管理/网络营销师证书含金量

小吴同学&#xff0c;能不能更新快一点&#xff01;&#xff01;&#xff01;感谢各位还未取消关注&#xff0c;确实是工作忙的慌&#xff0c;只有晚上可以总结写点东西&#xff0c;还望大家继续支持。今天分享的是关于720全景图制作的方法&#xff0c;现在市场上其实有很多设备…...