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

Compression 两个符号的最小描述长度和哈夫曼编码?,compression,huffman-code,information-theory,Compression,Huffman Code,Information Theory,我对两个符号组成的字母表的最小描述长度的解释感到困惑 更具体地说,假设我们想要编码一个二进制字符串,其中1的出现概率为0.80;例如,下面是一个长度为40的字符串,有32个1和8个0: 1011011011011011111011011011011011011011011011011011011011011011011011010101 根据标准的MDL分析,我们可以使用前缀代码(如Huffman)对该字符串进行编码,编码该字符串的代码为(-log(0.8)*32-log(0.2)*8),这比不

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

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

1011011011011011111011011011011011011011011011011011011011011011011011010101

根据标准的MDL分析,我们可以使用前缀代码(如Huffman)对该字符串进行编码,编码该字符串的代码为(-log(0.8)*32-log(0.2)*8),这比不进行任何编码的情况下复制该字符串要低

直观地说,对该字符串进行编码比对概率相同的1和0进行编码更“便宜”。然而,在实践中,我不明白为什么会出现这种情况。至少,我们需要一个位来区分1和0。我看不出前缀代码比只写二进制字符串而不编码更好

有人能帮我澄清一下吗

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

不能使用前缀代码,除非组合位以生成更多符号。例如,如果每两位编码一次,则现在有四个概率分别为0.64、0.16、0.16和0.04的符号。这将被编码为0,10,110,111。这样,每个符号的平均值为1.56位,或每个原始位的平均值为0.7800位。我们正在接近最佳的0.7219位/位(-0.2log20.2-0.8log20.8)

对三位分组这样做,每位得到0.7280位。令人惊讶地接近最佳值。在这种情况下,代码长度正好与概率很好地组合在一起。对于概率为0.512的符号,代码为1位(0);对于概率为0.128的三个符号,代码为3位(100、101、110);对于概率为0.032的三个符号和概率为0.008的一个符号,代码为5位(11100、11101、11110、11111)

您可以继续,并逐渐接近最佳的0.7219位/位。尽管对于更大的群体来说,它在时间和空间上变得更加低效。结果表明,帕累托波前是3比特到15比特的倍数。6位表示每位0.7252位,9位表示0.7251位,12位表示0.7250位,15位表示0.7249位。这种方法非常缓慢,需要达到28位才能达到0.7221。所以你最好在6点停下来。甚至只有3个也不错


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

感谢您的帮助。这是有道理的。这是一个非常有用的帖子/答案。您能否扩展您的答案,以显示Jose原始位字符串的编码将是什么样子的,因为有了一种新的方法,可以通过2比特块对位字符串进行编码?我试图弄清楚如何将这样一个转换后的位字符串解码成原始的位字符串。您必须在实际编码中对映射从00到0、01到10、10到110、00到111进行编码,对吗?那么,那个位字符串不是比原来的长吗?
0100101100000000100110001011010