2011-05-25 50 views
1

我要压缩,看起来像一个位图索引的文件。 (一个二进制格式的文件,只有“0”和“1”)。压缩 - 位

当使用字节来表示“0”或“1”的压缩具有良好的比率,这是因为低的随机性。

而不是使用一个字节来表示的“0”或“1”我想使用位。 实施例: 数8 = 00001000 numbeer 10 = 00001010

因此未压缩的文件将是一个比使用字节的位图索引来表示0和1。

小8倍但是,当我压缩此文件我的比例非常差,因为数据的随机性很高。

所以我的问题是。是否有任何压缩算法,较小的单位是一点而不是一个字节?或者我可以用来降低数据随机性的任何技巧?

+0

最终,** **每个文件使用代表仅“0”和“1”。什么使“位图索引”不同? – 2011-05-25 14:24:29

+1

困惑。你能举一个简短的例子,说明一个未压缩的输入和算法产生的压缩输出吗? – Hyperboreus 2011-05-25 14:26:26

+0

我不知道你对文件编码理解不够,或者没有清楚地解释你的问题,但无论哪种方式,请编辑你的问题来澄清。您希望获得8倍压缩比的唯一方法是,如果您只有2个唯一字节出现在文件中,例如如果你用8位来表示两种选择中的一种。我不明白你的问题,你是如何对比字节和比特的。 – 2011-05-25 14:32:06

回答

3

是否有任何压缩算法,较小的单元是一个比特而不是一个字节的?

任何基于熵的压缩算法都可以在“比特”级上工作,从而显示预期的行为。当它传递一个只包含“00000001”和“00000000”字节的输入时,编码器在某种程度上“看到”输入包含许多“0”位,并以某个“1”引发 - 它将适应这种情况并通过使用表格(或者压缩器用来表示它的状态)来处理这种情况来实现良好的压缩比。

如果你真的使用了一个字节中的所有位,输入的熵(“随机性”)要高得多,所以当你有一个只有1/8开头的输入时,压缩机的工作相当困难,而且压缩比也会受到影响。无论如何,我绝对认为这是一条路,因为您不需要依赖压缩机,因为压缩机可能会或可能不会很好地处理您输入数据中的“许多0计划”。

或者我可以用来降低数据随机性的任何技巧?

这些“技巧”涉及到对输入数据执行转换以减少输入数据的熵。你在这里可以做什么取决于你的输入数据的性质。如果它是真正的黑白“图像”,您可能需要查看JBIG或查看PNG图像标准中定义的转换。

1

但是当我压缩这个文件时,我的比例非常差,因为数据的高随机性。

压缩比这里是红鲱鱼。您应该比较压缩文件大小

理论上,压缩文件大小应该没有差别,因为它是相同的数据。

未压缩的比特-作为字节文件将是8倍。然而,它在理论上压缩到1/8的尺寸 - 但不比未压缩的打包版本更好。

(我假设你正在写在这里的8位字节,如果你正在写的32位整数,替代32 8以上。)