微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

计算二进制数据的熵来自字符串

如何解决计算二进制数据的熵来自字符串

我正试图围绕熵来思考。我基本明白这一点:

从技术上讲,熵是每个事件的概率乘以该事件的对数概率的所有事件的总和。 如果考虑一个 8 位字节,如果所有 256 个值的可能性相等,则该字节包含 8 位熵或等效的 8 位实数信息。如果某些位模式比其他位模式更有可能,例如字母“e”的位模式,则该字节将包含少于 8 位的熵或信息。 运行英文文本的熵非常低,大约为每字节 2.3 位。这就是压缩算法在文本文件上运行良好的原因。

https://www.quora.com/What-is-entropy-in-terms-of-cryptography

现在假设我正在使用 ASCII 字符串转换为二进制字符串数组,如

// [0 0 1 1 0 0 1 1]
// [1 1 1 1 0 0 1 1]
// [1 0 1 1 0 0 0 0]
// [0 0 1 1 0 0 1 1]

我设计了 2 种计算熵的方法(也许它们都错了,我不知道)。第一种是从 element[1] 开始,将每个位与 element[0] 和 element[2] 进行比较,对于它们在同一位置共享的每个位,将运行分数加 1。然后我除以 2。我最终得到的结果与上述 2.3 字节的熵一致。比如,我的大部分文本的得分是它们与邻居平均共享 5-6 位。

另一种方法是将每一“列”位相加,然后对它们求平均值以找到它们出现的概率。对于上述我得到

//=[2 1 4 4 0 0 3 3] / 4 = [.5 .25 1 1 0 0 .75 .75] as probabilities

对于上述情况,我不太确定如何推导出熵的分数。

无论如何,我很好奇人们是否可以帮助我了解我的做法是否正确,或者更有可能的是,我可以如何改进或以不同的方式理解这一点。

谢谢

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。