优先队列--专升本

优先队列定义

优先队列是一个以集合为基础的抽象数据类型。
优先队列中每个元素都有一个优先级。
不同的元素也有可能时同一个优先级。


##
优先队列的实现
  • 有序链表

用有序链表实现求最小元素(min(H))和删除(deleteMin(H))的时间复杂度为O(1)
插入(insert(x,H)),最坏的情况需要O(n),其中n为插入元素时优先队列中已有的元素个数

  • 二叉搜索树

用二叉搜索树表示右N个元素的优先队列,最坏的情况下插入和删除的时间复杂度为O(n)
平均时间为O(log2^n)

  • 无序链表

O(1)实现插入运算
删除需要O(n)时间

优先级树

  • 极小化优先级树

从根到叶的路径上,较高层的结点有较小的优先级。
插入和删除所需的时间一般和树的高有关。

  • 极大化优先级树

任意一结点存储的元素优先级不小于其孩子的优先级。

当一棵优先级树时近似满二叉树时,称其为堆或偏序树

  • 删除并返回最小优先级的算法

将最后一个叶子结点覆盖根节点
覆盖之后,就和优先级最低的孩子进行比较,直到没有其他元素比他小或者到了最后。
请添加图片描述
请添加图片描述

  • 插入算法

将需要插入的元素放在树的最后
然后依次和双亲比较,如果比双亲小,他们就互换位置。
直到没有其他元素比他大,或者到了根节点。
请添加图片描述

可并优先队列

可并优先队列也是一个以集合为基础的抽象数据类型

  • 左偏树

左偏树不仅能在O(log2^n)支持同一个优先队列的基本运算,还可以支持两个不同优先队列的合并运算。


左偏树分为左偏高树和左偏重树
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值