当前位置: 首页 > 知识库问答 >
问题:

从最小堆C创建哈夫曼代码树

郑佐
2023-03-14

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

  • 计算文件中每个字符的出现次数,然后每个唯一字符(及其频率)将存储为一个新的树节点
  • 然后,程序构建包含这些节点的最小堆,然后使用该最小堆构建哈夫曼代码树
  • 遍历(pre order和in order)将写入输出文件。树的每个内部节点都有标签I:xxx,其中xxx是int标签,叶子有L:xxx
  • 该程序最后构造一个表,其中包含存储为字符串的每个字符的编码(基于ASCII的,非true.bin版本)

我想我会将每个节点存储在哈夫曼类中,如下所示:

struct CharNode {

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

我不太确定该怎么办。任何帮助都将不胜感激!

共有1个答案

澹台博文
2023-03-14

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

这一部分也可以在C中轻松完成,因为它使用char和int作为等价项。

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

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

祝你好运,快乐编码:)

 类似资料:
  • 主要内容:哈夫曼树相关的几个名词,什么是哈夫曼树,构建哈夫曼树的过程,哈弗曼树中结点结构,构建哈弗曼树的算法实现赫夫曼树,别名“哈夫曼树”、“最优树”以及“最优 二叉树”。学习哈夫曼树之前,首先要了解几个名词。 哈夫曼树相关的几个名词 路径: 在一棵树中,一个结点到另一个结点之间的通路,称为 路径。图 1 中,从根结点到结点 a 之间的通路就是一条路径。 路径长度:在一条路径中,每经过一个结点,路径长度都要加 1 。例如在一棵树中,规定根结点所在层数为1层,那么从根结点到第 i 层结点的路径长度

  • 本文向大家介绍java哈夫曼树实例代码,包括了java哈夫曼树实例代码的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了哈夫曼树java代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍解析C++哈夫曼树编码和译码的实现,包括了解析C++哈夫曼树编码和译码的实现的使用技巧和注意事项,需要的朋友参考一下 一.背景介绍: 给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 二.实现步骤: 1.构造一棵哈夫曼树 2.根据创建好

  • 赫夫曼树 路径和路径长度:表示树从根节点开始到达节点经过的次数,若一颗树根节点为1层,那么第K层的树的路径的长度为K-1 权: 赋予每一个节点上面特定的权重值 带权路径:带权路径等于节点的权与路径长度的乘积,为带权路径 = 权 * 路径长度 树的带权路径长度:为所有叶子节点的带权路径之和记做WPL(weight path length) 赫夫曼树huffman-tree或哈夫曼树,又称最优二叉树,

  • 对于具有斐波那契频率的n个字符,最短代码和最长哈夫曼代码的长度是多少? 据我所知,如果我们建一棵树,它看起来就像一根树枝,从根到最低的叶子,每个节点的长度都是1。当我们从n-2个数字中创建第一个节点时,该节点的频率将为F[n]-1和F[n] 我们创建的树显然是一个不平衡的树,我认为这是不好的。 如果这是创建树的最佳方式,那么创建树的最长方式的长度是多少?如果这不是最佳方式,那么最短方式的长度是多少

  • 本文向大家介绍请你说一下哈夫曼编码?相关面试题,主要包含被问及请你说一下哈夫曼编码?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 哈夫曼编码是哈夫曼树的一种应用,广泛用于数据文件压缩。哈夫曼编码算法用字符在文件中出现的频率来建立使用0,1表示个字符的最优表示方式,其具体算法如下: (1)哈夫曼算法以自底向上的方式构造表示最优前缀码的二叉树T。 (2)算法以|C|个叶结点开始,执行|C|-