Static-Huffman
静态哈夫曼压缩文件的 C++ 实现
压缩:使用静态哈夫曼编码进行文件压缩,需要经过如下步骤
- 完整扫描文本,遍历所有字符以统计字符权重
- 根据字符权重建立静态哈夫曼树
- 保存权重信息到输出文件(解压重建哈夫曼树需要)
- 通过哈夫曼树生成各字符的哈夫曼编码
- 根据哈夫曼编码对原文件字符转换并以 bit 为单位输出
解压:使用对已经压缩到文件解压缩,需要经过如下步骤
- 扫描文本直至遇到标志位,以读取权重信息
- 根据字符权重重新建立静态哈夫曼树
- 读取哈夫曼编码并通过哈夫曼树还原字符
- 输出还原字符到解压文件
其他
重难点解决方案
- 使用精简后的结构体的形式,通过「二进制写」保存权重信息,以避免歧义、特殊字符处理的问题
- 使用权值为 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