我最近在大学开始了一门数据压缩课程。然而,我发现在计算机科学中使用的“熵”一词有些模糊不清。据我所知,它大致相当于系统或结构的“随机性”。
计算机科学中“熵”的恰当定义是什么?
我最近在大学开始了一门数据压缩课程。然而,我发现在计算机科学中使用的“熵”一词有些模糊不清。据我所知,它大致相当于系统或结构的“随机性”。
计算机科学中“熵”的恰当定义是什么?
熵可以有不同的含义:
在计算中,熵是操作系统或应用程序收集用于加密或其他需要随机数据的随机性。该随机性通常来自硬件源,包括现有的鼠标移动等,或专门提供的随机数生成器。
在信息论中,熵是与随机变量相关的不确定性度量。在这种情况下,该术语通常指香农熵,它以期望值的意义量化了消息中包含的信息量,通常以比特为单位。同样,香农熵是一个平均信息内容的度量,当我们不知道随机变量的值时,我们所缺失的信息内容。
数据压缩中的熵
数据压缩中的熵可能表示您输入到压缩算法的数据的随机性。熵越大,压缩比就越小。这意味着文本越随机,您就越无法将其压缩。
香农熵代表任何通信最佳可能无损压缩的绝对极限:将要编码的消息视为独立同分布随机变量序列,香农源编码定理显示,在极限情况下,用于将目标字母表中的消息编码成最短可能表示形式的平均长度是它们的熵除以目标字母表中符号数量的对数。
我最喜欢的定义是来自 Andrew Hunt 和 David Thomas 的优秀书籍 The Pragmatic Programmer: From Journeyman to Master 第一章:
软件熵
虽然软件开发几乎免疫于所有物理定律,但熵会给我们带来很大的压力。熵是物理学中指系统“混乱程度”的术语。遗憾的是,热力学定律保证了宇宙中的熵趋向于最大值。当软件的混乱程度增加时,程序员把它称为“软件腐败”。
有许多因素可以导致软件腐败。最重要的一个似乎是项目上工作的心理学或文化。即使你只是一个人的团队,你的项目心态也可能是非常微妙的。尽管有最好的计划和最好的人员,一个项目仍然可能在其生命周期内经历毁灭和衰退。但是还有其他项目,尽管面临巨大困难和不断的挫折,成功地与本质上趋向于混乱的自然斗争,并且管理做得很好。
...
...
破窗效应
一个未被修复的破窗,无论它保持多长时间,都会在建筑物居民中灌输一种被遗弃的感觉——一种权力机构不关心建筑物的感觉。于是另一个窗户被打破了。人们开始乱扔垃圾,涂鸦出现,严重的结构损坏开始出现。在相对较短的时间内,建筑物变得损坏到业主不愿意修理它的程度,而被遗弃的感觉成为现实。
“破窗效应理论”启发了纽约和其他大城市的警察部门,采取行动打击小事情,以防止大事情发生。它奏效了:解决破窗、涂鸦和其他小违规行为降低了重罪水平。
提示4
不要容忍破窗
不要让“破窗”(糟糕的设计、错误的决策或糟糕的代码)未被修复。一旦发现问题,立即解决它。如果没有足够时间正确修复它,那么就把它封起来。也许您可以注释掉有问题的代码,或显示“未实现”消息,或替换虚拟数据。采取一些行动以防止进一步损坏并表明您掌握局势。
文本来自:http://pragprog.com/the-pragmatic-programmer/extracts/software-entropy
我经常遇到熵的概念,它是指香农熵。
根据http://en.wikipedia.org/wiki/Information_entropy:
在信息论中,熵是与随机变量相关的不确定性度量。在此上下文中,这个术语通常指香农熵,它以期望值的方式量化消息中所包含的信息,通常以比特等单位表示。同样,香农熵是衡量当我们不知道随机变量的值时平均缺少的信息内容。
binary
symbol weight probability log surprise
A 2 0.4 -1.32 0.53
B 2 0.4 -1.32 0.53
C 1 0.2 -2.32 0.46
total 5 1.0 1.52
熵这个词可以用一句话来定义:
例如,想象一下宇宙的扩张:从开始时,所有物质都集中在一个小点之内,因此我们可以用“所有物质都在一个点之内”来描述该系统。而今天,为了描述整个宇宙系统,需要更多的信息,例如行星的位置、它们的运动以及上面的内容等等。
根据信息理论,这个定义也适用:例如,如果向密码(即该系统)添加更多字母,则需要更多的信息来描述密码。然后,您可以使用不同的单位进行度量,比如位或字符,例如
"hello" = 5个字符的熵 = 40位熵(如果字符大小为8位)。
由此还可以得出,拥有更多信息意味着你可以用更多方法来安排这些信息。如果你有40位,则有2^40种不同的安排方式。如果我们谈论密码,那么信息(位数)的可能组合越多,其破解所需的时间就越长(通过暴力破解或字典攻击)。
简单来说,熵定义了随机性。它更像是衡量某物的不可预测性。更加技术化地说,“在计算机中,熵是操作系统或应用程序收集用于加密或其他需要随机数据的数据。这些随机数据通常从硬件源(如鼠标移动或专门提供的随机性生成器)中收集。” 如维基百科所定义。
现在,我们可以轻松地将熵的含义与文件联系起来,作为衡量文件中字节的无序程度的度量。有各种用于定义熵的单位,例如nat、shannon或hartley。最常用的单位是Shannon。根据Shannon的算法,文件熵的值范围必须在0到8之间。因此,当熵值为零时,可以说结果是确定的。相反,当熵值为8时,结果是最不可预测的。 Shannon提供了一个公式来衡量事件结果的随机性:
Entropy = ∑ pi log(1/pi)
其中i是概率为pi的事件。
这个方程的结果总是在0到8之间。
欲了解更多信息,请访问链接:https://www.talentcookie.com/2016/02/file-entropy-in-malware-analysis/
熵对于病毒研究人员来说就像哈希码一样。如果你得到的熵较低,那么很可能是加密或压缩代码,可能会成为病毒。
标准二进制文件的熵比压缩或加密文件高。