计算机科学中熵的定义是什么?

70

我最近在大学开始了一门数据压缩课程。然而,我发现在计算机科学中使用的“熵”一词有些模糊不清。据我所知,它大致相当于系统或结构的“随机性”。

计算机科学中“熵”的恰当定义是什么?


6
熵是打开衣服烘干机,却发现里面没有已经给你叠好的衣服。 - Bradley Thomas
16个回答

0

熵在计算机科学中有很多含义,具体取决于上下文。在安全领域,熵指的是您提供了多少随机因素。例如,在生成私钥时,许多应用程序会要求您移动鼠标以产生熵。这通过将“人为”随机性元素添加到生成密钥的哈希过程中来产生熵。

现在,软件工程也有一个关于熵的定义。这个定义表示过时的代码,或者是由多个开发人员编写的代码。通常在提到需要重构软件项目时使用。“此项目的代码熵非常大,因为许多维护代码的人目前不在项目中。”

我还记得第三个例子的用法。在模拟退火(就计算机科学而言),熵被描述为在算法评估过程中发生的衰减程度。

我想回答您的问题,除了可以在字典中找到的定义之外,对于“熵”这个词并没有一个具体的定义。计算机科学如何应用这个术语取决于术语的上下文和应用对象。


0
简单来说,如果你知道语言中符号的概率,就可以计算出语言中符号的平均信息内容。
或者
语言的熵是衡量语言中平均符号信息内容的一种方法。
考虑一个公平的硬币;
有两个符号,每个符号的概率都是1/2,因此熵的计算如下:
h = -(1/2*log1/2 +1/2*log1/2)=1

0
在信息论中,与随机变量相关的不确定性度量是熵。它用于继承数据中的冗余或可预测性。
在数据压缩中,目标是通过减少冗余来减小数据的大小。通过利用数据中的模式和统计特性,压缩算法可以实现高效编码。如果压缩算法成功地识别和表示这些模式,压缩文件的大小可以显著小于原始文件,从而减少存储或传输需求。
一些常用的熵编码技术包括Huffman编码或算术编码。这些编码方法通常用于压缩算法中,将更频繁出现的符号分配较短的代码,将较不频繁出现的符号分配较长的代码。这些编码方法确保压缩表示更接近于准确表示信息所需的理论最小大小。

0

熵指的是软件根据客户需求偶尔重塑的程度,因此将其重新塑造以满足客户需求的成本变得最大。


0

熵是一个容易被夸大的概念。在我看来,它是一个相当简单和有用的概念

基本上,它量化了事件中你平均会学到什么,例如抛硬币、执行分支指令或索引数组。

例如,在搜索算法的中间进行比较操作时,有一定的概率P选择一个分支,而有(1-P)的概率选择另一个。

假设P为1/2,就像二分查找一样。然后,如果您选择了该分支,那么您就会比以前多学习1位信息,因为log(2/1),基数为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比特。

所以如果答案是YES,你学到了10个比特,但这种可能性大约是千分之一。

另一方面,NO更有可能。它的熵是

1023/1024 * log(1024/1023)

大约1乘以大约0等于约为零。

把这两个数加起来,平均下来,你将学到约1/100个比特的决策信息。

这就是为什么线性搜索很慢。每个决策的熵值(你可以期望学到多少信息)太小了,因为你需要学习10位才能在表中找到条目。


-1

我听说过有些人误用热力学中关于熵的定义来谈论计算机科学。

例如,他们说“这个系统的熵肯定是在增加。”

但实际上他们想表达的是“这段代码变得越来越糟糕了!”


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接