我最近在我的大学开设了数据压缩课程。但是,我发现使用术语“熵”,因为它适用于计算机科学而不是模棱两可。据我所知,它大致转化为系统或结构的“随机性”。
计算机科学“熵”的正确定义是什么?
答案 0 :(得分:58)
熵可能意味着不同的事情:
在计算中,熵是 操作收集的随机性 用于的系统或应用程序 密码学或其他用途 需要随机数据。这种随机性 经常从硬件中收集 消息来源,或者是预先存在的消息来源 作为鼠标移动或特别 提供随机生成器。
在信息论中,熵是一种 衡量不确定性 随机变量。这个词由 在这种情况下通常指的是 香农熵,其中 量化,在某种意义上 期望值,信息 包含在消息中,通常在 比特等单位。同等地, 香农熵是衡量的 一般的信息内容 当一个人不知道时失踪了 随机变量的值
数据压缩中的熵
数据压缩中的熵可能表示您输入到压缩算法的数据的随机性。熵越多,压缩比越小。这意味着文本越随机,你压缩它就越少。
Shannon的熵代表了一个 最好的绝对限制 任何无损压缩 沟通:将信息视为 编码为独立的序列 和相同分布的随机 变量,香农的源编码 定理表明,在极限中, 平均长度最短 编码的可能表示 给定字母表中的消息是他们的 熵除以对数 目标中的符号数 字母表。
答案 1 :(得分:16)
我最喜欢的定义,更具实用性,可以在Andrew Hunt和David Thomas出版的优秀书籍The Pragmatic Programmer: From Journeyman to Master的第1章中找到:
软件熵
虽然软件开发是免疫的 从几乎所有的物理定律,熵 努力打击我们。熵是一个术语 指物理量的物理量 系统中的“无序”。不幸, 热力学定律保证 宇宙中的熵趋于 最大化。无序时 软件,程序员的增加 称之为“软件腐烂”。
有很多因素可以 导致软件腐烂。最多 重要的似乎是 心理学,或文化,在工作 项目。即使你是一个团队 一,你的项目的心理可以 一个非常微妙的事情。尽管 最好的计划和最好的人,a 项目仍然可以经历毁灭和 在其一生中腐烂。然而那里 尽管是其他项目 巨大的困难和不断 挫折,成功地对抗自然 趋向于无序和管理 出来很好。
...
...
窗户破损。
一个破窗户,未经修复 任何相当长的时间, 灌输给居民 建立一种放弃感 - 一种 意识到权力是没有的 关心建筑。另一个 窗户破了。人们开始 乱扔垃圾。涂鸦出现了。严重 结构损坏开始了。在一个 相对较短的时间空间 建筑物被破坏了 老板想要修理它,以及 放弃感成为现实。
“破窗理论”有 新的警察部门 约克等主要城市破解 为了这个小东西 远离重要的东西。有用: 保持在破碎的窗户之上, 涂鸦和其他小的违规行为 降低了严重的犯罪水平。
提示4
不要使用破碎的Windows
不要留下“破碎的窗户”(不好 设计,错误的决定或穷人 代码)未修复。尽快修复每一个 因为它被发现了。如果有 没有足够的时间来妥善修复它, 然后登上它。也许你可以 注释掉有问题的代码,或者 显示“未实施”消息, 或替代虚拟数据。采取 一些防止进一步损害的行动 并表明你是最重要的 情况。
文字取自:http://pragprog.com/the-pragmatic-programmer/extracts/software-entropy
答案 2 :(得分:9)
我总是遇到香农熵意义上的熵。
来自http://en.wikipedia.org/wiki/Information_entropy:
在信息论中,熵是与随机变量相关的不确定性的度量。在该上下文中,该术语本身通常是指香农熵,其在期望值的意义上量化消息中包含的信息,通常以比特为单位。同样地,香农熵是当人们不知道随机变量的值时,缺少平均信息内容的度量。
答案 3 :(得分:9)
(来源:mit.edu)
信息理论概念 熵是一个概括 物理概念。有很多方法 描述熵。这是一项措施 随机的随机性 变量。它也是衡量标准的一种方法 随机的信息量 变量或随机过程 包含的内容。它也是一个下限 消息的数量 压缩。最后是它 是/否问题的平均数量 需要被问及一个随机的 实体确定其价值。
用于概率计算的样本应用中的熵方程:
它是rv所有值的总和 该值乘以概率的时间 该概率的对数(即 P(X)的logP(X))。这个等式可以 源于第一原则 信息属性。
答案 4 :(得分:4)
在压缩和信息理论方面,源的熵是来自源的符号可以传达的平均信息量(以位为单位)。非正式地说,符号越不可能,它的外观就越令人惊讶。
如果您的来源有两个符号,例如A
和B
,并且它们具有相同的可能性,那么每个符号都传达相同数量的信息(一位)。具有四个同等可能符号的源每符号传送两位。
有关更有趣的示例,如果您的来源有三个符号,A
,B
和C
,前两个符号的可能性是第三个符号的两倍,那么第三个符号更令人惊讶,但也不太可能。这个来源的净熵为1.52,如下所示。
您将熵计算为“平均意外”,其中每个符号的“意外”是概率乘以概率的负二进制对数:
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
使用二进制日志的否定(当然),因为0到1之间的值的日志(不包括)是负数。
答案 5 :(得分:4)
这是信息论中 entropy 的一个很好的替代解释。
熵是衡量不确定性的指标 预测强>
如果我们在做出初步预测后得到结果,我们还可以将熵描述为如何惊讶。
让我们说我们有一个弯曲的硬币给我们99%的时间头,1%的时间尾巴。由于只有百分之一的机会获得尾巴,如果我们真的得到尾巴,我们会非常惊讶。另一方面,如果我们有一个头脑,那就不会太令人惊讶了,因为我们已经有99%的机会获得头脑。
让我们假设我们有一个名为Surprise(x)
的函数,它会给我们每个结果带来惊喜的数量;然后我们可以平均概率分布的意外数量。这种平均惊喜数量也可以用来衡量我们的不确定性。这种不确定性称为 entropy 。
答案 6 :(得分:3)
熵一词可以用一句话来定义:
想象一下宇宙膨胀的一个例子:从一开始,所有物质都是在大爆炸之前的一个小点收集的,所以我们可以用#34来描述系统;所有物质都在一点之内。 #34;虽然今天需要更多的信息来描述系统(宇宙,即),人们需要描述所有行星位置,它们的运动,它们上面的内容等等。
在信息理论方面,定义也有效:例如:您添加到密码(系统)的字母越多,描述密码所需的信息就越多。然后你可以用不同的单位测量它,例如比特或字符
"你好" = 5个字符熵= 40位熵(如果charsize是8位)。
从这一点来看,您获得的信息越多,您可以将更多信息安排在其中。如果您有40位,则可以安排2 ^ 40种不同的方式。如果我们在这里谈论密码那么信息(比特)的可能性越多,它就越需要破解(使用蛮力或字典攻击)。
答案 7 :(得分:1)
简单来说,熵定义了随机性。这更像是一些不可预知的东西。用更多的技术词汇来说,“在计算中,熵是操作系统或应用程序收集的随机性,用于密码学或其他需要随机数据的用途。这种随机性通常是从硬件源收集的,可以是现有的,如鼠标移动或专门提供的随机生成器。“由维基百科定义。
现在可以很容易地得出关于文件的熵的含义,作为文件中字节的无序程度的度量。有各种单位用于定义像nat,shannon或hartley这样的熵。嗯,最常用的单位是香农。根据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/
答案 8 :(得分:1)
熵指的是软件根据客户要求偶尔重新塑造的程度,因此重塑它以满足客户需求的成本变得最大。
答案 9 :(得分:0)
熵就像病毒研究人员的哈希码一样。你得到的熵越少,这意味着它可能是加密或压缩的代码,可能是病毒。
标准二进制文件的熵比压缩或加密的二进制文件更高。
答案 10 :(得分:0)
熵在计算机科学中有很多含义。这取决于具体情况。在安全性中,熵意味着您放置了多少的漫反应,例如,当您生成私钥时,许多应用程序会要求您移动鼠标以生成熵。这会通过获取randomality的“human”元素生成熵,并将其添加到生成密钥的哈希过程中。
现在还有熵软件工程的定义。这个定义代表了过时代码,或许多开发人员编写它的代码。通常用于参考何时接近重构您的软件项目。 “该项目的代码具有大量的熵,因为许多维护它的人目前不在项目中。”
这是我记得的第三个示例用法。在模拟退火的主题中(就计算机科学而言),熵被描述为在算法评估过程中发生了多少衰减。
我想回答你的问题,除了你可以在字典中找到的那些之外,没有“熵”这个词的具体定义。计算机科学如何倾向于应用该术语取决于所使用术语的背景及其应用的内容。
答案 11 :(得分:0)
很容易从熵中做出很大的贡献。在我看来,这是一个非常simple and useful concept。
基本上它量化了你将从事件中学到什么,比如掷硬币,拿分支指令或索引数组。
就像在搜索算法中间的比较操作有一定概率P取一个分支,而1-P取另一个分支。
假设P是1/2,就像二进制搜索一样。然后,如果你选择那个分支,你比之前知道的要多一点,因为log(2/1),base 2是1.另一方面,如果你拿另一个分支,你也学习1位。
要获得您将学习的平均信息量,请将您在第一个分支上学到的内容乘以您获得该分支的概率,再加上您在第二个分支上学到的内容乘以该分支的概率。
1/2位1位,加1/2位1位,是1/2位加1/2位,或总共1位熵。这是您可以期望从该决定中平均学到的东西。
另一方面,假设您在1024个条目的表格中进行线性搜索。
在第一次==测试中,YES的概率是1/1024,因此该决定的YES的熵是
1/1024 times log(1024/1)
或1/1024 * 10 =约1/100位。
因此,如果答案是肯定的,那么你会学习10位,但这个机会大约是千分之一。
另一方面,NO更有可能。它的熵是
1023/1024 * log(1024/1023)
或大约1次大致零=大约零。
将两者加在一起,平均而言,您将了解该决定的1/100。
这就是线性搜索速度慢的原因。每个决策的熵(你可以期望学到多少)太小,因为你将不得不学习10位来找到表中的条目。
答案 12 :(得分:0)
计算机科学中的熵通常是指一串比特的随机性。 以下问题是关于如何准确:
答案 13 :(得分:0)
简单来说,如果您知道语言中符号的概率,就可以计算语言中符号的平均信息内容。
或
语言的熵是语言中平均符号的信息内容的度量
考虑一个公平的硬币;
有两个符号,每个符号的概率为1/2 所以熵计算为
h = - (1/2 * log1 / 2 + 1/2 * log1 / 2)= 1
答案 14 :(得分:-1)
我听说人们滥用熵的热力学定义w.r.t CS。
E.g。熵在这个系统中肯定会增加。
当他们的意思是这个代码越来越差!