数据结构 优先级队列

本文深入探讨了优先级队列中的数据结构——大根堆和小根堆,包括它们的定义、插入和删除策略以及时间复杂度。介绍了大根堆的初始化方法,并扩展到左高树(HBLT)和重量优先左高树(WBLT)的概念,讨论了HBLT的插入、删除和合并。此外,还阐述了堆排序和霍夫曼编码这两种基于堆的算法,它们在实际问题中的应用及时间复杂度分析。
摘要由CSDN通过智能技术生成

线性表描述

大根树、小根树

  • 大根树: 每个节点都大于其子节点的树。
  • 子节点个数可以大于2

在这里插入图片描述
在这里插入图片描述

大根堆、小根堆

  • 定义:既是大根树(小根树),又是完全二叉树

大根堆插入策略

  • 将新元素插入编号为 m+1 的位置

  • 从n+1 号位置开始,沿该位置到根的路径,判断新元素能否放在该位置,能结束,不能则将父节点上的元素下移到该位置,当前位置上移到父节点。继续判断

  • 时间复杂度 O(log n)

大根堆删除

在这里插入图片描述

  • 时间复杂度 O(log n)

大根堆的初始化

  • 进行n次插入操作, O(n logn)
  • 必要时对数进行调整的方法构造, θ ( n ) \theta(n) θ(n)

使用数组存储完全二叉树

在这里插入图片描述

  • 从数组中最右一个有孩子的结点开始,元素位置为 i = n/2
  • 循环 i 从 n/2 到 1 ,重构 i 号元素为根的子树称为大根堆
  • 时间复杂度 O(n)

在这里插入图片描述

左高树

左高树,一种适合与实现优先级队列的链表结构。
左高树,适合优先级队列的合并

  • 高度优先左高树 HBLT 最大/最小HBLT
  • 重量优先左高树 WBLT 最大/最小WBLT

扩充二叉树: 增加了外部节点的二叉树

在这里插入图片描述

  • S(x) 为任一节点 x 到他子树的外部接待你的所有路径中,最短的一条路径长度 S(x) =2
    在这里插入图片描述
    s(x) = min{s( L) ,s( R)} + 1

HBLT

  • 定义 高度优先左高树: 当且仅当一棵二叉树的任何一个内部节点,其左孩子的s值大于等于右孩子的s值时,该二叉树为高度优先左高树

  • 定义 最大HBLT :同时使最大树的HBLT

在这里插入图片描述

最大HBLT 插入、删除

  • 插入:构建单独的一棵 最大HBLT,然后合并

在这里插入图片描述

  • 删除:删除根节点,将左右子树HBLT合并

在这里插入图片描述

合并HBLT

在这里插入图片描述
实际上,合并也是一个递归的过程

初始化最大HBLT

  • 方法一 n 次插入 O(n logn)
  • 方法二:
  1. 创建n个最大HBLT ,每个树包含一个元素,这n棵树 构成了FIFO队列
  2. 一次删除队列中两个最大HBLT,合并,然后加入队列末尾
    时间复杂度 O(n)

WBLT

  • 重量 w(x),以 x 为根的子树内部节点数

  • 重量优先左高树: 对二叉树的任一内部节点,左孩子w值 大于右孩子 w值。

  • 最大WBLT : 既是WBLT又是大根树

应用

堆排序

霍夫曼编码

在这里插入图片描述
-时间复杂度 O(n logn) 因为每次从堆中取数 O(log n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值