常用数据结构与算法:二叉堆(binary heap)

2023-11-16

一:什么是二叉堆

二:二叉堆的实现 

三:使用二叉堆的几个例子

一:什么是二叉堆

1.1:二叉堆简介
      二叉堆故名思议是一种特殊的堆,二叉堆具有堆的性质( 父节点的 键值 总是大于或等于(小于或等于)任何一个子节点的键值),二叉堆又具有二叉树的性质( 二叉堆是 完全二叉树 或者是 近似完全二叉树)。当父节点的键值大于或等于(小于或等于)它的每一个子节点的键值时我们称它为最大堆(最小堆)。
      二叉堆多数是以数组作为它们底层元素的存储,根节点在数组中的索引是1,存储在第n个位置的父节点它的子节点在数组中的存储位置为2n与2n+1。可以借用网上的一幅图来标示这种存储结构。其中数字表明节点在数组中的存储位置。
        1               
      /   \           
     2     3             
    / \   / \       
   4   5  6  7     
  / \ / \        
 8  9 10 11       
1.2:二叉堆支持的操作
       二叉堆通常支持以下操作:删除,插入节点,创建二叉堆。这些操作复杂对都是O(log2n)
       二叉堆也可以支持这些操作:查找。O(n)复杂度。
1.3:二叉堆的特点
       二叉堆是专门为取出最大或最小节点而设计点数据结构,这种数据结构在查找一般元素方面性能和一般数组是没有多大区别的。二叉堆在取出最大或最最小值的性能表现是O(1),取出操作完成之后,二叉堆需要一次整形操作,以便得到下一个最值,这个操作复杂度O(log2n)。这是一个相当理想的操作时间。但是二叉堆也有一个缺点,就是二叉堆对存储在内存中的数据操作太过分散,这导致了二叉堆在cpu高速缓存的利用与内存击中率上面表现不是很好,这也是一个二叉堆理想操作时间所需要付出的代价。
1.4:二叉堆的使用范围
       二叉堆主要的应用击中在两个地方一个是排序,一个是基于优先级队列的算法。比如:
       1:A*寻路
       2:统计数据(维护一个M个最小/最大的数据)
       3:huffman code(数据压缩
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常用数据结构与算法:二叉堆(binary heap) 的相关文章

随机推荐

  • windows下apache开启FastCGI

    1 在此链接下载一个合适的mod fcgid 文件 64位下载第一个 32位第二个 http www apachelounge com download 2 将解压后将文件中的 mod fcgid so 复制到apache的modules目
  • 用ProGuardGui混淆多个有依赖关系的项目,亲测有效

    前提 公司要混淆代码 A项目依赖B项目 要整体混淆AB这两个项目 步骤1 把AB两个项目通过maven命令打成同一个jar包 在pom文件里添加如下 执行maven命令语句 assembly assembly
  • SqueezeNet算法解析—鸟类识别—Paddle实战

    文章目录 一 理论基础 1 前言 2 设计理念 2 1 CNN微架构 CNN MicroArchitecture 2 2 CNN宏架构 CNN MacroArchitecture 2 3 模型网络设计探索过程 2 4 结构设计策略 2 5
  • Qt下载(多种下载通道+所有版本)

    Qt 体积很大 有 1GB 3GB 官方下载通道非常慢 相信很多读者会崩溃 所以建议大家使用国内的镜像网站 较快 或者使用迅雷下载 很快 作为 Qt 下载教程 本文会同时讲解以上三种下载方式 Qt 官方下载 非常慢 Qt 官网有一个专门的资
  • Qt CSV文件的创建,读写操作

    文章目录 一 CSV文件介绍 二 创建CSV文件 三 写入CSV文件 四 读取CSV文件 一 CSV文件介绍 逗号分隔值 Comma Separated Values CSV 有时也称为字符分隔值 因为分隔字符也可以不是逗号 其文件以纯文本
  • scala和spark的下载与安装

    简易安装scala和spark 一 安装scala 1 安装scala scala下载注意和jdk的版本号 下载地址 https www scala lang org download 2 上传到linux虚拟机里 可通过rz方式上传 上传
  • 量化交易是如何实现的?

    前面我们讲到 其实最简单的量化交易 就是定投 设置好标的 时间 金额 那么不需自己动手 就可以按照设置的策略进行定投 这就是量化交易的最初形态 那么 为了实现更加复杂一些的交易 比如说 选股 买卖点位的确定 追踪实时行情等 应该怎么去实现呢
  • Python_数据读取_读取单个csv文件和批量读取csv文件

    读取单个csv pd read csv 直接读取单个csv文件通过pd read csv 函数直接在指定路径进行文件读取 需要利用Pandas包 其中 1 路径前的r表示路径符号不转义 window操作系统下不再用调整 为 或 进行文件读取
  • spark dataframe 数据类型转换

    文章目录 1 spark sql数据类型 数字类型 日期类型 复杂类型 2 spark sql和scala数据类型对比 3 spark sql数据类型转换示例 代码 输出 1 spark sql数据类型 数字类型 ByteType 代表一个
  • 解决连接腾讯云Ubuntu服务器,使用Xshell和WinSCP无法直接用root用户登陆

    发现腾讯云服务器登入只能用ubuntu用户名登入 但是无法使用root登录 下面是解决方法 1 首先使用Xshell用ubuntu用户进入系统 输入命令 sudo passwd Enter new UNIX password 然后输入密码
  • 没有权限删除文件

    通过远程发版时 有可能会没有权限删除文件 如下解决方法 1 将user 用户切换root 用户 sudo su root 该方法不一定成功 因为有可能设置权限你不能切换 但成功以后一劳永逸 当方法1没有成功时 采用如下方法 2 将你所操作的
  • 网络请求-登录

    post请求的header中发送本地存储的token 校验服务器中是否存在
  • jsbridge原理_Hybrid App技术解析 -- 原理篇

    引言 随着 Web 技术和移动设备的快速发展 Hybrid 技术已经成为一种最主流最常见的方案 一套好的 Hybrid架构方案 能让 App 既能拥有极致的体验和性能 同时也能拥有 Web技术 灵活的开发模式 跨平台能力以及热更新机制 想想
  • FLatten Transformer 简化版Transformer

    今天在找论文时 看到一篇比较新奇的论文 在这里跟大家分享一下 希望可以给一些人提供一些思路 虽然现在Transformer 比较火 在分割上面也应用的比较多 但是我一直不喜欢用 其中一个原因是结构太复杂了 平时我主要用一个sel atten
  • Java正则工具类:字母数字下划线、数据库url校验等

    文章目录 前言 一 正则基础语法 二 正则工具类 总结 前言 本文内容观摩的是其他作者的代码 在基础上增加修改了一些 参考原文地址 java用正则表达式 提示 以下是本篇文章正文内容 下面案例可供参考 一 正则基础语法 字符 描述 匹配输入
  • RabbitMQ --- 惰性队列、MQ集群

    一 惰性队列 1 1 消息堆积问题 当生产者发送消息的速度超过了消费者处理消息的速度 就会导致队列中的消息堆积 直到队列存储消息达到上限 之后发送的消息就会成为死信 可能会被丢弃 这就是消息堆积问题 解决消息堆积有三种思路 增加更多消费者
  • Numpy中的转换成数组的array函数(更新中)

    今天给大家讲解一下图像处理和深度学习里面一个常用的函数array array的功能是接收一个多位置数 例如列表list 元 组tuple等 列表 list1 1 2 3 list2 1 2 3 list3 1 2 3 元组 tuple 1
  • 单片机串口时序与TTL电平

    串口是一个广义的概念 这是单讲单片机的串口UART 以及单片机的TTL电平 主要是记录一下自己忘了还能再看一下 1 TTL电平标准 输出 L lt 0 8V H gt 2 4V 输入 L lt 1 2V H gt 2 0V TTL器件输出低
  • VTK笔记-体绘制-vtkVolume

    体渲染 体渲染是一个用于描述3D数据渲染过程的术语 这里的3D数据是指其属性信息遍及3D空间 而不是一个在3D空间中的2D曲面 面渲染是对数据的表面或者一个抽取的轮廓进行渲染 是通过对面上的标量属性进行显示的 面渲染能显示其表面或者一个抽取
  • 常用数据结构与算法:二叉堆(binary heap)

    一 什么是二叉堆 二 二叉堆的实现 三 使用二叉堆的几个例子 一 什么是二叉堆 1 1 二叉堆简介 二叉堆故名思议是一种特殊的堆 二叉堆具有堆的性质 父节点的 键值 总是大于或等于 小于或等于 任何一个子节点的键值 二叉堆又具有二叉树的性质