香农熵为0.922,三个不同的值


14

给定一串值AAAAAAAABC,对数基数2的Shannon熵  为0.922。据我了解,在基数  2,向上舍入的Shannon熵是二进制中代表单个值之一的最小位数。

摘自此维基百科页面上的介绍:

https://en.wikipedia.org/wiki/Entropy_%28information_theory%29

那么,如何用一位来表示三个值呢?A  可以是  1B  可以是  0 ; 但是你怎么代表  C

先感谢您。

Answers:


16

您计算出的熵并非真正针对特定字符串,而是针对随机符号源,该随机符号源以8的概率  生成A810B和 C的可能性为 110每个 10个,连续符号之间没有相关性。计算出的这种分布的熵为0.922,这意味着您平均无法使用每个字符少于0.922位来表示从该分布生成的字符串。

开发可能要达到此速度的代码可能非常困难。*例如,霍夫曼编码将分配代码010和  11AB和  C分别为平均1.2  每个字符的比特。尽管与每个字符两位的天真编码相比,它与熵相比还差很多,但仍然好得多。任何尝试进行更好编码的尝试都可能会利用这样一个事实,即即使连续运行十个A也比单个B更有可能(概率0.107)  。B


*事实证明,不难达到想要的程度–请参阅其他答案!


18

这是一种具体的编码,可以平均用不到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答案中选择n=2。较大的n会导致更好的代码(如他所言,将Shannon熵逼近极限)。

上面编码的每个符号对的平均位数为

8108101+38101103+1108104+41101106=1.92
1.92/2=0.96每个符号的比特,而不是远离香农熵实际上这样一个简单的编码。


13

D是在随后的分布{A,B,C}:如果XD然后Pr[X=A]=4/5Pr[X=B]=Pr[X=C]=1/10

对于每个n我们可以构建前缀码Cn:{A,B,C}n{0,1}使得

limnEX1,,XnD[Cn(X1,,Xn)]n=H(D).

DH(D)0.922A

A8BC

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.