用于霍夫曼编码的字节频率表

时间:2010-08-18 18:10:42

标签: c++ binary-data huffman-code

我正在编写需要处理任意二进制文件的霍夫曼压缩器和解压缩器(在C ++中)。我需要一些数据结构建议。现在,我的压缩过程如下:

  • 以二进制形式将文件的字节读取到char * buffer
  • 使用std :: map计算文件中每个字节模式的频率。 (这是我认为我要求麻烦的地方。)
  • 根据频率直方图构建二叉树。每个内部节点都有其子节点的频率之和,每个叶子节点都有一个char *来表示实际的字节。

这是我到目前为止的地方。

我的问题是,如果我只使用从char *到int的映射,我到底在测量什么。如果我是对的,这实际上并不是我需要的。我认为我真正在做的是使用char *来跟踪实际的4字节指针值。

所以,我打算做的是使用直方图的映射和叶节点上存储的数据的char。我的逻辑声音在这里吗?我的推理告诉我是的,但由于这是我第一次处理二进制数据,我要小心那些只会以奇怪的方式出现的陷阱。

感谢。

1 个答案:

答案 0 :(得分:3)

你不需要地图;只有256个可能的值。只需拥有int freq[256] = {0},并为输入中的每个字节添加freq[data[idx]]++

如果您真的想要地图,请使用map<unsigned char, int>;您对使用char*地图的怀疑是正确的。