当前位置: 首页 > news >正文

说明哈夫曼树查询过程的例子

哈夫曼树(Huffman Tree)本身‌不用于区间查询‌,而是用于‌数据压缩编码‌(如生成前缀码)。但如果你指的是‌线段树(Segment Tree)‌的查询过程(因为之前的讨论涉及 ql <= left && qr >= right),我们可以分别用例子说明两者的查询逻辑:


1. 哈夫曼树的编码查询(字符 → 二进制码)

场景‌:给定字符频率表,构建哈夫曼树并查询字符的二进制编码。

查询过程‌(如查字符 B 的编码):

  1. 从根节点 (100) 出发,B 在右子树 (55)
  2. 进入 (55) 的左子树 (25)B 不在此子树(25 包含 C 和 D),转向右子树 (30)
  3. 进入 (30) 的左子树 (14)B 在右子节点 (B:9)
  4. 路径记录:根→右(1)→左(0)→右(1),最终编码为 101

结果‌:B 的哈夫曼编码是 101


2. 线段树的区间查询(最大值/求和)

场景‌:假设线段树存储区间 [1,6] 的最大值,查询子区间 [2,5] 的最大值。

查询过程‌(查询 [2,5] 的最大值):

  1. 从根 [1,6] 开始,区间 [2,5] 不完全覆盖 [1,6],递归左右子树。
    • 左子树 [1,3]:与 [2,5] 有重叠([2,3]),继续递归。
      • 子节点 [1,2]:与 [2,5] 重叠 [2,2],返回该区间最大值。
      • 子节点 [3,3]:被 [2,5] 包含,直接返回 [3,3] 的值。
    • 右子树 [4,6]:与 [2,5] 有重叠 [4,5],继续递归。
      • 子节点 [4,5]:完全被 [2,5] 包含,直接返回其最大值。
      • 子节点 [6,6]:与 [2,5] 无重叠,忽略。
  2. 合并结果:比较 [2,2][3,3][4,5] 的最大值,得到最终结果。

关键点‌:

  • 完全覆盖‌(如 [4,5] 在 [2,5] 内)直接返回节点值,终止递归。
  • 无重叠‌(如 [6,6])直接跳过。
  • 部分重叠‌(如 [1,3])继续递归。

总结

  • 哈夫曼树‌:通过路径从根到叶子生成字符的二进制编码,‌无区间查询‌。
  • 线段树‌:通过判断区间覆盖关系(ql <= left && qr >= right)高效查询区间聚合值,‌不会越界到无关子树‌。
http://www.dtcms.com/a/349438.html

相关文章:

  • 基于MATLAB的遥感图像变化检测
  • 嵌入式系统学习Day22(进程)
  • 【React】案例:B站评论
  • C#/.NET/.NET Core技术前沿周刊 | 第 51 期(2025年8.18-8.24)
  • Coze用户账号设置修改用户头像-后端源码
  • 【系统架构设计师】数据库设计(一):数据库技术的发展、数据模型、数据库管理系统、数据库三级模式
  • 容器学习day02
  • [React]Antd Cascader组件地区选择
  • SpringBoot整合Elasticsearch
  • SQL语法指南
  • Docker基本使用方法和常用命令
  • Spring文件上传核心技术解析
  • Java 编辑器与 IDE:开发者手中的利剑与盾牌
  • 彻底解决PyCharm中Matplotlib无法显示图形及中文乱码问题
  • Nginx + Certbot配置 HTTPS / SSL 证书
  • 无人机航拍数据集|第21期 无人机四种动物目标检测YOLO数据集2857张yolov11/yolov8/yolov5可训练
  • 数据分析编程第三步:分组统计
  • 无人机航拍数据集|第17期 无人机油棕树目标检测YOLO数据集1803张yolov11/yolov8/yolov5可训练
  • 读《精益数据分析》:A/B测试与多变量测试
  • 【41页PPT】SAP数据仓库和数据分析方案(附下载方式)
  • 【C++游记】List的使用和模拟实现
  • 【机器学习入门】1.1 绪论:从数据到智能的认知革命
  • Java基础 8.25
  • 如何在Debian服务器上设置Node.js日志轮转
  • 深度学习入门第一课——神经网络实现手写数字识别
  • java后端如何实现下载功能
  • Python爬虫实战:Selenium模拟操作爬取马蜂窝旅游攻略
  • 神经网络与梯度算法:深度学习的底层逻辑与实战解析
  • Python办公——爬虫百度翻译网页版(自制翻译小工具——进阶更新版)
  • Python爬虫框架设计:类封装与工程化实践​