从min-heap C ++创建Huffman代码树

时间:2015-11-13 08:01:01

标签: c++ decoding huffman-code min-heap

假设您有一个必须从给定的.txt文件中读取文本的C ++程序。该计划将:

  • 计算文件中每个字符的出现次数,然后将每个唯一字符(及其频率)存储为新的树节点
  • 程序然后构建一个包含这些节点的min-heap,然后使用这个min-heap构建Huffman Code Tree。
  • 遍历(预订和有序)将写入输出文件。树的每个内部节点都有标签I:xxx,其中xxx是int标签,而叶子有L:xxx
  • 程序最终构造一个表,其中包含存储为字符串的每个字符的编码(基于ASCII,不是真正的.bin版本)

我想我会将每个节点存储在像这样的霍夫曼类中:

struct CharNode {

      char value;
      int frequency;
      bool internal;
      int label;
      CharNode *parent;
      CharNode *left_child;
      CharNode *right_child;
};

我不确定在哪里继续。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

首先使用一个数组,该数组足够长,每个char都有一个元素应该被应用程序识别。现在查看字符串,增加与其ASCII值对应的数组元素。 (您可能需要减去初始ASCII值的某个基本量,因此您开始计算第一个数组元素为'a')

这部分也可以在C中轻松完成,因为它使用字符和整数作为等价物。

完成后,您将拥有所有字符的出现次数。现在,您可以在开始构建树节点后遍历数组。并在该树上使用堆算法。

或者只是对数组进行排序,然后从那里开始构建树。

祝你好运,编码愉快:)。