数据结构简介:堆

本文深入解析堆数据结构,包括二叉堆、d堆、左式堆、斜堆、二项队列的定义、特性和使用场景。探讨了各种堆的结构特性、堆序特性及常用操作,如插入、删除、降低关键字值等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构简介

数据结构简介

堆的分类

1. 二叉堆(堆)
  • 定义
    二叉堆是完全二叉树或者是近似完全二叉树.
  • 时间复杂度
    平均O(logN)
  • 二叉堆特性
  1. 结构特性:是一颗完全二叉树
  2. 堆序特性:父节点大于或等于其各子节点(最大堆);父节点小于或等于其各子节点(最小堆)
  • 堆常用操作
  1. 建堆:
    (1)将N项插入堆中:执行N次插入操作
    (2)将N项任意放入一颗空树中:放入完成后,从最后一个非叶子节点开始执行下浮操作
  2. 插入:在尾部插入,采用上浮策略
  3. 删除最值:删除根节点,将最后一个节点放到根节点位置,采用下浮策略
  • 堆其他操作(以最小堆为例)
  1. 降低关键字的值:采用上浮策略
  2. 增加关键字的值:采用下浮策略
  3. 删除除堆中的某个关键字:先执行1,降低无穷大的差值,再执行删除最值操作
2. d堆
  • 定义
    d堆是二叉堆的简单推广,像一个二叉堆,只是所有节点有d个儿子
  • 使用场景
    用法与B树用法相似,d堆高度低,适用于主存存不下的情况
3. 左式堆
  • 定义
    又称作最左堆、左倾堆,是堆的一种,保留了堆的结构性和堆序性
  • 时间复杂度
    插入 删除 合并: O(logN)
  • 特点
  1. 结构性:任一节点的零路径长比它的诸儿子节点的零路径长的最小值多1. 不再是一棵完全二叉树(Complete tree),而且是一棵极不平衡的树
  2. 堆序性:任意结点的值比其子树任意结点值均小(最小堆的特性)
4. 斜堆
  • 定义
    是左式堆的自调节形式,是具有堆序的二叉树,不存在对树的结构性的限制
  • 时间复杂度
    对任意M次连续操作,总的最坏情形运行时间是O(MlogN),摊还开销为O(logN)
  • 特点
    堆序性:任意结点的值比其子树任意结点值均小(最小堆的特性)
  • 使用场景
    适用于合并(merge)较多的场景
5. 二项队列
  • 定义
    二项队列不同于左式堆和二叉堆等优先队列的实现之处在于,一个二项队列不是一棵堆序的树,而是堆序树的集合,即森林.堆序树中的每棵树都是由约束形式的,叫做二项树.
  • 时间复杂度
    合并 插入 删除:最坏的时间复杂度O(logN), 但是插入的平均时间复杂度O(1)
  • 使用场景
    适用于合并(merge)和插入较多的场景
  • 二项队列代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值