logo
0
0
WeChat Login

Huffman 文件压缩与解压缩工具

这是一个使用C++实现的Huffman编码文件压缩与解压缩工具,用于学习和实践数据压缩算法。

功能特点

  • ✅ 基于Huffman编码的无损数据压缩
  • ✅ 支持任意文本文件的压缩和解压
  • ✅ 自动计算字符频率并构建最优Huffman树
  • ✅ 显示压缩率和编码表
  • ✅ 完整的错误处理

编译方法

使用 Makefile (推荐)

make

手动编译

g++ -std=c++11 -Wall -O2 main.cpp huffman.cpp -o huffman

使用方法

压缩文件

./huffman -c <输入文件> <输出文件>

解压文件

./huffman -d <输入文件> <输出文件>

使用示例

运行完整示例

make example

这将自动:

  1. 创建一个测试文件
  2. 压缩测试文件
  3. 解压压缩文件
  4. 验证文件内容是否一致

手动操作

# 创建测试文件 echo "Hello, World! This is a test for Huffman coding." > test.txt # 压缩文件 ./huffman -c test.txt test.huf # 解压文件 ./huffman -d test.huf output.txt # 比较原始文件和解压后的文件 diff test.txt output.txt

项目结构

. ├── huffman.h # Huffman编码类的头文件 ├── huffman.cpp # Huffman编码类的实现 ├── main.cpp # 主程序入口 ├── Makefile # 编译配置 └── README.md # 项目说明

Huffman编码原理

Huffman编码是一种常用的无损数据压缩算法,其核心思想是:

  1. 统计字符频率:统计输入文件中每个字符出现的频率
  2. 构建Huffman树:基于字符频率构建最优二叉树
  3. 生成编码:为每个字符生成二进制编码(高频字符用短编码,低频字符用长编码)
  4. 编码数据:将原始数据转换为二进制编码
  5. 存储树结构:保存Huffman树结构以便解压

示例输出

正在压缩文件: test.txt -> test.huf 哈夫曼编码表: ' ': 00 'a': 1101 'b': 111000 'c': 111001 ... 压缩完成! 原始大小: 256 字节 压缩后大小: 128 字节 压缩率: 50.00%

清理

make clean

技术细节

  • 使用优先队列(最小堆)构建Huffman树
  • 前序遍历保存和恢复Huffman树结构
  • 位操作进行高效的二进制编码转换
  • 处理字节对齐和padding问题

注意事项

  • 适用于文本文件压缩
  • 大文件可能需要优化内存使用
  • 压缩率取决于输入文件的字符频率分布

About

使用哈夫曼编码对文件进行压缩与解压缩

Language
C++78.8%
Makefile21.2%