如何计算文件的熵?
如何计算文件的熵? (或者让我们说一堆字节)
我有一个主意,但是我不确定它在数学上是正确的。
我的想法如下:
- 创建一个由256个整数组成的数组(全为零)。
遍历文件及其每个字节,
增加数组中的相应位置。
最后:计算数组的“平均值”值。
- 用零初始化一个计数器,
并为每个数组条目:
将条目的差值加到“平均值”的计数器上。
好吧,现在我被卡住了。如何以所有结果都在0.0到1.0之间的方式“投影”计数器结果?但我敢肯定,这个主意还是有矛盾的…
我希望有人有更好,更简单的解决方案?
注意:我需要整个事情来对文件的内容进行假设:(
纯文本,标记,压缩或某些二进制文件,…)
回答:
- 最后:计算数组的“平均值”值。
- 用零初始化一个计数器,并为每个数组条目:将条目的差值加到“平均值”的计数器上。
经过 一些 修改,您可以得到香农的熵:
重命名“平均”为“熵”
(float) entropy = 0for i in the array[256]:Counts do
(float)p = Counts[i] / filesize
if (p > 0) entropy = entropy - p*lg(p) // lgN is the logarithm with base 2
正如韦斯利所说,我们必须将熵除以8才能在 范围内进行调整
(或者,我们可以使用对数底数256)。
以上是 如何计算文件的熵? 的全部内容, 来源链接: utcz.com/qa/427124.html