我最近在大学开始了一门数据压缩课程。然而,我发现在计算机科学中使用的“熵”一词有些模糊不清。据我所知,它大致相当于系统或结构的“随机性”。
计算机科学中“熵”的恰当定义是什么?
我最近在大学开始了一门数据压缩课程。然而,我发现在计算机科学中使用的“熵”一词有些模糊不清。据我所知,它大致相当于系统或结构的“随机性”。
计算机科学中“熵”的恰当定义是什么?
熵在计算机科学中有很多含义,具体取决于上下文。在安全领域,熵指的是您提供了多少随机因素。例如,在生成私钥时,许多应用程序会要求您移动鼠标以产生熵。这通过将“人为”随机性元素添加到生成密钥的哈希过程中来产生熵。
现在,软件工程也有一个关于熵的定义。这个定义表示过时的代码,或者是由多个开发人员编写的代码。通常在提到需要重构软件项目时使用。“此项目的代码熵非常大,因为许多维护代码的人目前不在项目中。”
我还记得第三个例子的用法。在模拟退火(就计算机科学而言),熵被描述为在算法评估过程中发生的衰减程度。
我想回答您的问题,除了可以在字典中找到的定义之外,对于“熵”这个词并没有一个具体的定义。计算机科学如何应用这个术语取决于术语的上下文和应用对象。
熵指的是软件根据客户需求偶尔重塑的程度,因此将其重新塑造以满足客户需求的成本变得最大。
熵是一个容易被夸大的概念。在我看来,它是一个相当简单和有用的概念。
基本上,它量化了事件中你平均会学到什么,例如抛硬币、执行分支指令或索引数组。
例如,在搜索算法的中间进行比较操作时,有一定的概率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位才能在表中找到条目。
我听说过有些人误用热力学中关于熵的定义来谈论计算机科学。
例如,他们说“这个系统的熵肯定是在增加。”
但实际上他们想表达的是“这段代码变得越来越糟糕了!”