邓俊辉数据结构与算法学习笔记-第十章

本章节详细介绍了优先级队列的概念,重点探讨了完全二叉堆的结构、插入、删除、批量建堆的原理与优化。堆排序算法通过反复交换和下滤实现。此外,还提到了左式堆作为解决部分有序序列的高效合并方法。

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


day61

第十章 优先级队列

10.a

10.a1 需求与动机

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

10.a2 基本实现

实现:考虑 efficiency + cost(效率+成本)
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述杀鸡焉用牛刀

10.b

10.b1 完全二叉堆结构

在这里插入图片描述在这里插入图片描述在这里插入图片描述Complete Binary Heap
在这里插入图片描述在这里插入图片描述在这里插入图片描述

10.b2 完全二叉堆插入与上滤

在这里插入图片描述这一过程,即所谓的上滤(percolate up)
在这里插入图片描述在这里插入图片描述在这里插入图片描述在上滤时先将e暂存起来,直到找到e的最终位置,再赋值e,可以降低常数复杂度。
比较操作的复杂度也可以进一步改进。
可以证明,在常规分布下,每个节点上升的平均高度,是常数O(1)。

10.b3 完全二叉堆删除与下滤

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述comparsion的比较复杂度在多叉堆(d-heap)中将会变得至关重要。

10.b4 完全二叉堆: 批量建堆

在这里插入图片描述在这里插入图片描述在这里插入图片描述|n/2| - 1 为最末尾的内部节点的秩
在这里插入图片描述调整顺序,内部节点由下向上,由右向左
在这里插入图片描述Floyd算法(方法2):高收入者多纳税(金字塔高层节点少,高度height高);低收入者多纳税(金字塔底层节点多,高度height低)

10.c

10.c 堆排序算法

在这里插入图片描述在这里插入图片描述反复的交换,下滤
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

10.xa

10.xa1 左式堆:结构

在这里插入图片描述方法二令人不满意之处:Floyd算法是基于完全无序的向量构建堆,但是我们现在的向量是前面一部分有序,后面一部分有序,Floyd算法不能很好的利用这个有序性。左式堆正是解决这个问题很好的答案。
在这里插入图片描述堆序性才是堆结构的本质要求
在这里插入图片描述在这里插入图片描述在这里插入图片描述

10.xa1 左式堆合并

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述合并是围绕右侧链进行的,前面有提到rChain = O(logn),所以合并的时间复杂度为O(logn)
在这里插入图片描述在这里插入图片描述C.A.Crane是上面merge算法的发明者,同时他对对AVL树也给出了高效的合并算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值