最小描述长度和两个符号的霍夫曼编码?

时间:2015-09-18 14:23:36

标签: compression huffman-code information-theory

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

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

1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 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' s和0&s以相同的概率出现。但是,在实践中,我不明白为什么会出现这种情况。至少,我们需要一位来区分1&0和0' s。我不知道前缀代码如何比没有编码的情况下编写二进制字符串更好。

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

1 个答案:

答案 0 :(得分:3)

  

我不知道前缀代码如何比写代码更好   没有编码的二进制字符串。

您不能使用前缀代码,除非您将位组合在一起以生成更多符号。例如,如果您每两位编码一次,则现在有四个符号,概率为0.64,0.16,0.16和0.04。这将用0,10,110,111编码。这给出了每个符号平均1.56比特,或每个原始比特0.7800比特。我们越来越接近每位最佳0.7219位(-0.2 log 2 0.2 - 0.8 log 2 0.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位。虽然在更大的分组中时间和空间变得更加低效。帕累托前沿的结果为三位到三位的倍数.6位每位为0.7252位,9位为0.7251,12位为0.7250,15位为0.7249。这种方法非常缓慢,你需要转到28位才能达到0.7221。所以你不妨在6点停下来。或者即使只有3点也不错。

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