相关疑难解决方法(0)

如何计算文件的熵?

如何计算文件的熵?(或者
只是说一堆字节)我有一个想法,但我不确定它在数学上是否正确.

我的想法如下:

  • 创建一个256个整数的数组(全为零).
  • 遍历文件并为其每个字节
    增加数组中的相应位置.
  • 最后:计算数组的"平均"值.
  • 使用零初始化计数器,
    并为每个数组的条目:
    将条目的差异添加到计数器的"平均值".

好吧,现在我被卡住了.如何以一种所有结果介于0.0和1.0之间的方式"计划"计数器结果?但我敢肯定,这个想法无论如何都是不一致的......

我希望有人有更好更简单的解决方案吗?

注意:我需要整个事情来对文件的内容做出假设:(
明文,标记,压缩或一些二进制文件,......)

algorithm file-io entropy

70
推荐指数
8
解决办法
5万
查看次数

如何有效地预测数据是否可压缩

我想编写一个存储后端来存储更大的数据块.数据可以是任何数据,但主要是二进制文件(图像,pdf,jar文件)或文本文件(xml,jsp,js,html,java ...).我发现大部分数据已经被压缩了.如果所有内容都已压缩,则可以节省大约15%的磁盘空间.

我正在寻找最有效的算法,可以高概率地预测一块数据(比如说128 KB)是否可以被压缩(无损压缩),而不必在可能的情况下查看所有数据.

压缩算法将是LZF,Deflate或类似的东西(可能是Google Snappy).因此,预测数据是否可压缩应该比压缩数据本身快得多,并且使用更少的内存.

我已经知道的算法:

  • 尝试压缩数据的一个子集,比方说128个字节(这有点慢)

  • 计算128个字节的总和,如果它在一定范围内,则它可能不可压缩(在128*127的10%范围内)(这很快,相对较好,但我正在寻找更可靠的东西,因为算法实际上只查看每个字节的最高位)

  • 查看文件头(相对可靠,但感觉像作弊)

我想一般的想法是我需要一种能够快速计算字节列表中每个位的概率是否大约为0.5的算法.

更新

我已经实现了"ASCII检查","熵计算"和"简化压缩",并且都能提供良好的结果.我想改进算法,现在我的想法是不仅要预测数据是否可以被压缩,还要预测它可以被压缩多少.可能使用算法的组合.现在如果我只能接受多个答案......我会接受给出最佳结果的答案.

其他答案(新想法)仍然欢迎!如果可能,使用源代码或链接:-)

更新2

现在在Linux中实现了类似的方法.

java compression

22
推荐指数
3
解决办法
4466
查看次数

标签 统计

algorithm ×1

compression ×1

entropy ×1

file-io ×1

java ×1