数据结构-堆
堆: 优先队列(Priority Queue):特殊的“队列”,取出元素的顺序是 依照元素的优先权(关键字)大小,而不是元素进入队列的先后顺序 优先队列可以用完全二叉树表示: 两个特性: 结构性:用数组表示的完全二叉树 有序性:任一结点的关键字是其子树所有结点的最大值(或最小值) “最大堆(MaxHeap)”,也称“大顶堆”:最大值 “最小堆(MinHeap)”,也称“小顶堆” :最小值 从根结点到任意结点路径上结点序列的有序性! 堆的抽象数据类型描述 类型名称:最大堆(MaxHeap) 数据对象集:完全二叉树,每个结点的元素值不小于其子结点的元素值 操作集:最大堆H MaxHeap,元素item ElementType,主要操作有: •MaxHeap Create( int MaxSize ):创建一个空的最大堆。 • Boolean IsFull( MaxHeap H ):判断最大堆H是否已满。 •Insert( MaxHeap H, ElementType item ):将元素item插入最大堆H。 •Boolean IsEmpty( MaxHeap H ):判断最大堆H是否为空。 •ElementType DeleteMax( MaxHeap H ):返回H中最大元素(高优先级)。 哈夫曼树: 定义:最优二叉树或哈夫曼树: WPL最小的二叉树 带权路径长度(WPL):设二叉树有n个叶子结点,每个叶子结点带 有权值 w, 从根结点到每个叶子结点的长度为 l,则每个叶子结 点的带权路径长度之和就是:所有叶子节点的l*w的和 哈夫曼树的构造 :每次把权值最小的两棵二叉树合并 哈夫曼树的特点: 没有度为1的结点; n个叶子结点的哈夫曼树共有2n-1个结点; 哈夫曼树的任意非叶节点的左右子树交换后仍是哈夫曼树; 同一权值可对应多个不同构成的哈夫曼树 集合及运算 : 并查集:集合并、查某元素属于什么集合 并查集问题中集合存储如何实现? 可以用树结构表示集合,树的每个结点代表一个集合元素 采用数组存储形式 ,数组中每个元素均有一个属性parent存储其父节点的下标 根节点的父节点可以设置为一个可以标识根节点的值,如-1等 查找某个元素所在的集合://由根节点决定 即找到根节点,根据父节点一直找下去,直到找到根节点 集合的并运算 : 分别找到X1和X2两个元素所在集合树的根结点 如果它们不同根(说明X1,X2不在同一个集合中),则将其中一个根结点的父结点指针设置成 另一个根结点的数组下标
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构