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

100种算法【Python版】第52篇——无损压缩之霍夫曼编码

本文目录

  • 1 算法步骤
  • 2 算法示例
  • 3 算法应用
    • 3.1 压缩字符串
    • 3.2 压缩RGB图像

霍夫曼编码是一种无损数据压缩算法,用于根据字符出现的频率为每个字符分配变长编码。其基本思路是使用频率较高的字符分配较短的编码,而频率较低的字符分配较长的编码,从而实现数据压缩。

1 算法步骤

  • 统计字符频率:
    • 计算输入文本中每个字符的出现次数,构建字符频率表。
  • 构建霍夫曼树:
    • 将每个字符及其频率视为一棵树的叶子节点,插入优先队列(最小堆)。
    • 反复从堆中取出频率最小的两个节点,合并成一个新节点(其频率为两个节点频率之和),并将新节点插入堆中。
    • 直到堆中只剩下一个节点,该节点即为霍夫曼树的根节点。
  • 生成霍夫曼编码:
    • 从霍夫曼树的根节点开始,递归遍历树:
      • 左子树编码为 0,右子树编码为 1,直到到达叶子节点为止,记录每个字符的编码。
  • 编码和解码:
    • 使用生成的编码表对输入文本进行编码。
    • 可以根据编码表将编码文本解码回原始文本。

2 算法示例

假设有以下文本:</


http://www.kler.cn/a/383833.html

相关文章:

  • CIDEr: Consensus-based Image Description Evaluation
  • 基于 EventBridge + DashVector 打造 RAG 全链路动态语义检索能力
  • Windows磁盘管理右键无法删除卷,右键只有帮助选项按钮
  • 数据库->事务
  • [含文档+PPT+源码等]精品基于PHP实现的会员综合管理平台的设计与实现
  • 【学习记录】使用CARLA录制双目摄像头SLAM数据
  • 查看网路信息-ifconfig命令
  • Tomasulo算法介绍
  • 介绍一下memcpy(c基础)
  • 文本语义分块、RAG 系统的分块难题:小型语言模型如何找到最佳断点?
  • 【Golang】区块链练习(一)
  • 2025天津市考8日报名,建议收藏好报名流程
  • 昆仑通态触摸屏学习路程
  • NFT Insider #154:The Sandbox Alpha 4 第四周开启,NBA Topshot NFT 销量激增至新高
  • WPF中的转换器
  • 机器学习—推理:做出预测(前向传播)
  • WPF+MVVM案例实战(二十二)- 制作一个侧边弹窗栏(CD类)
  • AWS S3在客户端应用不能使用aws-sdk场景下的文件上传与下载
  • 七.numpy模块
  • 2024-11-06 问AI: [AI面试题] 人工智能如何用于欺诈检测和网络安全?
  • Bert快速入门
  • 【大数据学习 | kafka高级部分】kafka的优化参数整理
  • 数据集整理
  • 机器学习:使用SVM进行人脸识别
  • Linux(CentOS)运行 jar 包
  • WireShark入门学习笔记