【问题标题】:Condition for single bit code for a character in Huffman code?霍夫曼代码中字符的单位代码的条件?
【发布时间】:2011-03-06 05:00:21
【问题描述】:

这是我在学校环境中遇到的一个问题,但它一直困扰着我,所以我决定在这里问。

在霍夫曼压缩中,固定长度的序列(字符)使用可变长度的序列进行编码。代码序列长度取决于源字符的频率(或概率)。

我的问题是:最低最高字符频率是多少,该字符将使用一位编码?

【问题讨论】:

    标签: math compression huffman-code


    【解决方案1】:

    原来答案是0.4,即如果最高频率p为p>=0.4,则保证对应字符的1位码.换句话说,这是一个充分条件。

    p >= 1/3 也是必要条件。也就是说,可能有0.4 > p >= 1/3的例子,最短代码是1位,但如果p 。

    对此进行推理的方法是查看代码树的构造方式,特别是最后 3 个幸存子树的频率。 Johnsen 中出现了一个证明,"On the redundancy of binary Huffman codes", 1980(不幸的是,这是一个付费链接)。

    【讨论】:

    • 除了简单的二进制情况——如果只有 2 个符号,无论频率如何,霍夫曼总是为每个符号分配 1 位。
    • 在this arxiv preprint 的附录中有一个证明。不幸的是,我无法理解推理......我不明白为什么标记为“u”的节点在标记为“v1”和“v2”的节点之前合并是必然的。
    【解决方案2】:

    一般来说,大约 50% 的输入符号流必须包含给定符号,以便 Huffman 将其编码为单个位。这样做的原因是,由于霍夫曼编码的工作方式(一个符号的编码不能是另一个符号的前缀),通过使用单个位对符号进行编码,您需要 每个其他符号的第一个位 em> 是相反的值(即,如果一个符号编码为0,则其他所有符号都必须以1 开头,再加上至少一位)。由于您要消除任何给定位长度的一半可能的编码空间,因此您需要获得一种方法来编码至少一半的输入符号以达到收支平衡。

    请注意,有一种特殊情况,符号空间仅包含 3 个符号。在这种情况下,频率最高的符号将用 1 位编码(因为其他两个将是未选择的第一位值的第 2 位变化) - 如果 2 或更多具有同样更大的概率,任何一个都可以被编码。因此,在 3 个符号的情况下,具有 34% 概率的符号理论上可以编码为单个位(例如,0),而其他两个可能具有 33% 或更低的概率并编码为10 和 11。

    因此,如果您正在考虑所有种可能性,那么从技术上讲,任何 1/3 或以上的内容都可能被编码为单个位(在 3 个符号的情况下)。

    【讨论】:

    • 一个例外是3个等概率符号:它们可以编码为0、10、11
    • 是的,我已经将其添加为注释。 :) 这是一个边缘案例,但可能相关。
    • 还有其他相关情况(1/3、1/6、1/6、1/6、1/6),但并非所有情况下一个符号的概率为 1/ 3.我很想看到一个能说明区别的答案。
    • 谢谢,Amber,但我不确定你的推理是否正确。例如,对于频率为 (0.41, 0.2, 0.2, 0.19) 的 4 个字符,我相信编码会是 (0, 10, 110, 111)。这将提供比 4 个两位字符更好的压缩,例如对于 100 个字符,需要 198 位而不是 200 位。但是我仍然不确定如何概括这个想法。
    • 推理是为一般用例设计的,其中符号数为 >>> 2^2,因此大多数符号将被编码为超过 2-3 位。对于符号数量较少的情况,即使频率较低,从字符的 2 位交换到 1 位的“节省”也相对较大,而对于总符号数量较多的情况,节省较少,除非字符出现在非常高的频率。但是,在 1/3 处肯定有一个下限(除了符号数量小于 3 的普通情况)。
    猜你喜欢
    • 2014-04-21
    • 2011-08-02
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    相关资源
    最近更新 更多