【问题标题】:Struggling with this practice interview question. Any and all help appreciated在这个练习面试问题上苦苦挣扎。任何和所有的帮助表示赞赏
【发布时间】:2020-05-05 03:25:05
【问题描述】:

霍夫曼编码是一种根据频率对字符进行编码的方法。每个字母都分配有一个可变长度的二进制字符串,例如 0101 或 111110,其中较短的长度对应于更常见的字母。为了实现这一点,构建了一棵二叉树,以便从根到任何叶子的路径唯一地映射到一个字符。遍历路径时,向左孩子下降对应前缀中的 0,而向右下降对应 1。

这是一个示例树(注意只有叶节点有字母):

        *
      /   \
    *       *
   / \     / \
  *   a   t   *
 /             \
c               s

使用这种编码,猫将被表示为 0000110111。

给定一个字符频率字典,构建一棵 Huffman 树,并使用它来确定字符与其编码的二进制字符串之间的映射。

【问题讨论】:

标签: algorithm data-structures tree huffman-code


【解决方案1】:

构建哈夫曼树的步骤

输入是一组唯一字符及其出现频率,输出是霍夫曼树。

  1. 为每个唯一字符创建一个叶子节点,并构建所有叶子节点的最小堆(Min Heap用作优先级队列。 频率字段用于比较最小堆中的两个节点。最初, 最少出现的字符在根)

  2. 从最小堆中提取频率最小的两个节点。

  3. 创建一个新的内部节点,其频率等于两个节点频率之和。将第一个提取的节点作为其左子节点 另一个提取的节点作为其右孩子。将此节点添加到 最小堆。

  4. 重复步骤#2 和#3,直到堆中只包含一个节点。剩下的节点是根节点,树是完整的。

Huffman Tree build procedure with example

看这个教程在这里描述一步一步的构建树过程..

【讨论】:

    猜你喜欢
    • 2016-12-11
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多