如何计算文件的熵? (或者让我们说一堆字节) 我有一个主意,但是我不确定它在数学上是正确的。
我的想法如下:
遍历文件及其每个字节, 增加数组中的相应位置。
最后:计算数组的“平均值”值。
好吧,现在我被卡住了。如何以所有结果都在0.0到1.0之间的方式“投影”计数器结果?但我敢肯定,这个主意还是有矛盾的…
我希望有人有更好,更简单的解决方案?
注意:我需要整个事情来对文件的内容进行假设:( 纯文本,标记,压缩或某些二进制文件,…)
最后:计算数组的“平均值”值。 用零初始化一个计数器,并为每个数组条目:将条目的差值加到“平均值”的计数器上。
经过 一些 修改,您可以得到香农的熵:
重命名“平均”为“熵”
(float) entropy = 0 for 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才能在 0 范围内进行调整 。 。 1 (或者,我们可以使用对数底数256)。