之前提到了一个类似于伪代码的哈夫曼压缩的实现,这篇文章主要呈现的是如何真正的编译出来需要的哈夫曼压缩代码。

要实现哈夫曼压缩,我们需要有如下的东西:

  • 一个保存哈夫曼树的结构体
  • 一个优先队列,其中每个在优先队列中的 Datapoint(结构体) 要能存储哈夫曼树的根,以及 Datapoint 的 Priority
  • 一个调用如上方案实现哈夫曼压缩的 cpp 文件
  • 一个 UI 界面
  • 如果要实现加密,需要有加密的库

结合如上几点,最后我做了一个 MFC 成品:

MFC_Huffman_Encoding


Introduction for S compressor

S compressor is a MFC program that uses Huffman encoding to compress and decompress file. It supports encryption and decryption based on DES.

Main Features

  1. Easy to use. You can simply drop your file on the window of the program and then you can choose whether compress or decompress your file.
  2. Reliable. The program compress your file based on Huffman encoding. It will accurately decompress your file into the original file.
  3. Encryption. The program supports the encryption of your file. The encrypted file can only be decompressed by S compressor with your password. Without correct password, the decompressed file will be meaningless "garbage" file.

如果你想要独立研究以上代码,可以查看如下内容:

  • 一个保存哈夫曼树的结构体 -> Treenode.h 包含了树结点的定义
  • 一个优先队列,其中每个在优先队列中的 Datapoint(结构体) 要能存储哈夫曼树的根,以及 Datapoint 的 Priority -> pqheap.h 包含了优先队列的定义,datapoint.h 包含了每个数据点的定义
  • 一个调用如上方案实现哈夫曼压缩的 cpp 文件 -> Huffman.cpp 提供了哈夫曼压缩的实现

注:以上提到的文件使用的都是 C++ 标准库,如果使用它们只需确保将这些文件都加入 header file 和 source file