如何计算文件的熵?

如何计算文件的熵? (或者让我们说一堆字节)

我有一个主意,但是我不确定它在数学上是正确的。

我的想法如下:

  • 创建一个由256个整数组成的数组(全为零)。
  • 遍历文件及其每个字节,

    增加数组中的相应位置。

  • 最后:计算数组的“平均值”值。

  • 用零初始化一个计数器,

    并为每个数组条目:

    将条目的差值加到“平均值”的计数器上。

好吧,现在我被卡住了。如何以所有结果都在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才能在 范围内进行调整

(或者,我们可以使用对数底数256)。

以上是 如何计算文件的熵? 的全部内容, 来源链接: utcz.com/qa/427124.html

回到顶部