给定一串值,对数基数的Shannon熵 为。据我了解,在基数 ,向上舍入的Shannon熵是二进制中代表单个值之一的最小位数。
摘自此维基百科页面上的介绍:
https://en.wikipedia.org/wiki/Entropy_%28information_theory%29
那么,如何用一位来表示三个值呢? 可以是 , 可以是 ; 但是你怎么代表 ?
先感谢您。
给定一串值,对数基数的Shannon熵 为。据我了解,在基数 ,向上舍入的Shannon熵是二进制中代表单个值之一的最小位数。
摘自此维基百科页面上的介绍:
https://en.wikipedia.org/wiki/Entropy_%28information_theory%29
那么,如何用一位来表示三个值呢? 可以是 , 可以是 ; 但是你怎么代表 ?
先感谢您。
Answers:
这是一种具体的编码,可以平均用不到1位表示每个符号:
首先,将输入字符串分成成对的连续字符(例如,AAAAAAAABC变为AA | AA | AA | AA | BC | BC)。然后编码AA为0,AB为100,AC为101,BA为110,CA为1110,BB为111100,BC为111101,CB为111110,CC为111111。 我不说,如果有一个奇怪会发生什么数量的符号,但您可以使用任意编码对最后一个符号进行编码,输入较长时并不重要。
这是用于分配独立符号对的霍夫曼代码,对应于在Yuval答案中选择。较大的会导致更好的代码(如他所言,将Shannon熵逼近极限)。
上面编码的每个符号对的平均位数为
让是在随后的分布:如果然后和。
对于每个我们可以构建前缀码使得