静态哈夫曼压缩文件的 C++ 实现

Static-Huffman

静态哈夫曼压缩文件的 C++ 实现

压缩:使用静态哈夫曼编码进行文件压缩,需要经过如下步骤
  1. 完整扫描文本,遍历所有字符以统计字符权重
  2. 根据字符权重建立静态哈夫曼树
  3. 保存权重信息到输出文件(解压重建哈夫曼树需要)
  4. 通过哈夫曼树生成各字符的哈夫曼编码
  5. 根据哈夫曼编码对原文件字符转换并以 bit 为单位输出
解压:使用对已经压缩到文件解压缩,需要经过如下步骤
  1. 扫描文本直至遇到标志位,以读取权重信息
  2. 根据字符权重重新建立静态哈夫曼树
  3. 读取哈夫曼编码并通过哈夫曼树还原字符
  4. 输出还原字符到解压文件

其他

重难点解决方案
  • 使用精简后的结构体的形式,通过「二进制写」保存权重信息,以避免歧义、特殊字符处理的问题
  • 使用权值为 0 的上述结构体为权值信息结束标志位
  • 利用哈夫曼树特性,通过重建的哈夫曼树根节点权值的到总字符数,解决最后字节可能存在的冗余问题
项目特点
  • 堆与哈夫曼树使用模版,泛型编程
  • 注释丰富
静态哈夫曼缺点
  • 两次扫描文本,影响性能
  • 需要保存权重信息到文本

The project’s URL https://github.com/SUSTYuxiao/Static-Huffman


2018.03.19 By 张鹏霄 zpx736312737@126.com | Others in Blog https://sustyuxiao.github.io