【问题标题】:Minimum description length and Huffman coding for two symbols?两个符号的最小描述长度和霍夫曼编码?
【发布时间】:2015-09-18 14:23:36
【问题描述】:

我对两个符号的字母表的最小描述长度的解释感到困惑。

更具体地说,假设我们要编码一个二进制字符串,其中 1 的出现概率为 0.80;例如,这是一个长度为 40 的字符串,有 32 个 1 和 8 个 0:

1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 0 1 1 1 1 0 1 1 0 0 1

按照标准的 MDL 分析,我们可以使用前缀码(如 Huffman 的)对该字符串进行编码,该字符串的编码码为 (-log(0.8) * 32 - log(0.2) * 8),低于在没有任何编码的情况下复制字符串。

直观地说,编码这个字符串比 1 和 0 以相等概率出现的某个字符串“更便宜”。但是,在实践中,我不明白为什么会这样。至少,我们需要一位来区分 1 和 0。我看不出前缀代码如何比只编写不编码的二进制字符串做得更好。

有人可以帮我澄清一下吗?

【问题讨论】:

    标签: compression huffman-code information-theory


    【解决方案1】:

    我看不出前缀代码比仅仅编写 没有编码的二进制字符串。

    您不能使用前缀代码,除非您将位组合成更多符号。例如,如果您每两位编码,您现在有四个符号,概率分别为 0.64、0.16、0.16 和 0.04。这将被编码为 0、10、110、111。这给出了平均每个符号 1.56 位,或每个原始位 0.7800 位。我们离最优的每比特 0.7219 位(-0.2 log20.2 - 0.8 log20.8)有点接近。

    对三位分组执行此操作,您将获得 0.7280 位/位。出乎意料地接近最佳值。在这种情况下,代码长度恰好与概率很好地组合在一起。对于概率为 0.512 的符号,编码为 1 位 (0),对于概率为 0.128 的三个符号,编码为 3 位 (100, 101, 110),对于概率为 0.128 的三个符号,编码为 5 位 (11100, 11101, 11110, 11111)概率为 0.032,一个符号的概率为 0.008。

    您可以继续前进并逐渐接近最佳的 0.7219 位/位。尽管对于较大的分组,它在时间和空间上变得更加低效。帕累托前沿在 15 之前是 3 位的倍数。6 位为每位 0.7252 位,9 位为 0.7251,12 为 0.7250,15 为 0.7249。这种方法非常缓慢,您需要达到 28 位才能达到 0.7221。所以你最好停在 6 点。或者即使只有 3 点也不错。

    您也可以使用前缀编码以外的其他方式,例如算术编码、范围编码或非对称数字系统编码。它们有效地为每个符号使用小数位。

    【讨论】:

    • 感谢您的帮助。这是有道理的。
    • 这是一个非常有用的帖子/答案。考虑到将位串编码为 2 位块的新方法,您能否扩展您的答案以显示 Jose 的原始位串的编码方式?我试图弄清楚如何将这种转换的位串解码为 Jose 提供的原始位串。您必须在实际编码中对从 00 到 0、01 到 10、10 到 110 以及 00 到 111 的映射进行编码,对吗?但是那个位串不会比原来的长吗?
    • 0100101100000000100110001011010
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 2020-10-11
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多