Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compression 香农';s熵公式。帮我澄清一下_Compression_Entropy_Information Theory - Fatal编程技术网

Compression 香农';s熵公式。帮我澄清一下

Compression 香农';s熵公式。帮我澄清一下,compression,entropy,information-theory,Compression,Entropy,Information Theory,我对熵公式的理解是,它用于计算表示某些数据所需的最小位数。它通常在定义时使用不同的措辞,但之前的理解是我至今所依赖的 这是我的问题。假设我有一个100'1'后跟100'0'=200位的序列。字母表是{0,1},熵的基数是2。符号“0”的概率为0.5,“1”的概率为0.5。所以熵是1或1位,代表1位 但是,您可以使用类似于100/1/100/0的方式对其进行运行长度编码,其中输出的位数后跟位。看起来我有一个比数据更小的表示。特别是如果你把100增加到更大的数字 我现在使用:作为参考。 我哪里出错了

我对熵公式的理解是,它用于计算表示某些数据所需的最小位数。它通常在定义时使用不同的措辞,但之前的理解是我至今所依赖的

这是我的问题。假设我有一个100'1'后跟100'0'=200位的序列。字母表是{0,1},熵的基数是2。符号“0”的概率为0.5,“1”的概率为0.5。所以熵是1或1位,代表1位

但是,您可以使用类似于100/1/100/0的方式对其进行运行长度编码,其中输出的位数后跟位。看起来我有一个比数据更小的表示。特别是如果你把100增加到更大的数字

我现在使用:作为参考。 我哪里出错了?它是分配给符号的概率吗?我不认为这是错的。还是我把压缩和熵的关系搞错了?还有别的吗

谢谢

编辑

以下是我的后续回答:您是否会将熵公式应用于消息的特定实例,以尝试找出其信息内容?把信息“aaab”说成熵是~0.811是有效的吗。如果是,那么1…10…0的熵是多少,其中1和0用熵公式重复n次。答案是1吗

是的,我知道您正在创建输入符号的随机变量,并根据您的消息猜测概率质量函数。我想确认的是,熵公式没有考虑符号在消息中的位置。

看一看

在不丢失信息的情况下压缩字符串的最小位数。这是根据一个固定但通用的解压方案定义的,解压方案由通用图灵机给出

在你的特殊情况下,不要局限于字母表{0,1}。对于您的示例,使用{0…0,1…1}(0的百分之一百和1的百分之一百)

还是我把压缩和熵的关系搞错了

你很接近,但最后一个问题是错误在哪里。如果你能将某个东西压缩成比它的原始表示更小的形式,这意味着原始表示至少有一些冗余消息中的每一位实际上都没有传递一位信息。

由于冗余数据不会增加消息的信息内容,因此也不会增加其熵。例如,想象一个“随机位生成器”,它只返回值“0”。这根本不传达任何信息!(实际上,它传递的信息量尚未定义,因为任何只包含一种符号的二进制消息都需要熵公式中的零除。)

相比之下,如果您模拟了大量随机抛硬币,则很难将此消息的大小减少很多。每一位贡献了接近1位的熵

压缩数据时,提取冗余。作为交换,你必须设计一个知道如何压缩和解压这些数据的方案,从而付出一次性的熵代价;这本身就需要一些信息

但是,您可以使用类似于100/1/100/0的方式对其进行运行长度编码,其中输出的位数后跟位。看起来我有一个比数据更小的表示。特别是如果你把100增加到更大的数字

总之,您可以设计一个方案,使数据的编码小于原始数据,这一事实告诉您一些重要的事情。也就是说,您的原始数据包含的信息非常少


进一步阅读
要更彻底地处理这个问题,包括如何通过几个示例计算任意数字序列的熵,请查看。

您的编码在这个示例中起作用,但也可以设想一个同样有效的情况:010101010101。。。它将被编码为1/0/1/1/


熵是衡量所有可能的信息,可以在给定的字母表,而不仅仅是病理的例子

约翰·费米内拉说得对,但我想还有更多的话要说

香农熵是基于概率的,而概率总是在旁观者的眼中

你说过1和0的可能性相等(0.5)。如果是这样,那么1001s后跟1000s的字符串的概率为0.5^200,其中-log(基数2)是200位,正如您所期望的那样。然而,这个字符串的熵(香农术语)是它的信息量乘以它的概率,或者200*0.5^200,这仍然是一个很小的数字

这一点很重要,因为如果您使用运行长度编码来压缩字符串,则该字符串的长度会很小,但在所有2^200个字符串上求平均值,这样做不会很好。如果运气好的话,平均值将达到200左右,但不会低于200

另一方面,如果你看你的原始字符串,说它是如此惊人,以至于生成它的人很可能会生成更相似的字符串,那么你实际上是说它的概率大于0.5^200,所以你对字符串生成器的原始概率结构做了不同的假设,也就是说,它的熵小于200位

就个人而言,我觉得这个主题非常有趣,特别是当你研究Kolmogorov(算法)信息时。在这种情况下,您将字符串的信息内容定义为可以生成它的最小程序的长度。这导致了对软件工程和语言设计的各种见解


我希望这能有所帮助,谢谢你的提问。

谢谢。就公式本身而言,公式会告诉我这一点吗?消息包含lit的事实