压缩-位

| 我想压缩一个看起来像BITMAP索引的文件。 (仅使用\“ 0 \”和\“ 1 \”的二进制格式的文件)。 当使用字节表示\“ 0 \”或\“ 1 \”时,由于随机性较低,因此压缩率较高。 我不想使用字节来表示\“ 0 \”或\“ 1 \”,而是要使用一个位。 例: 数字8 = 00001000 数字10 = 00001010 因此,未压缩的文件将比位图索引使用字节表示0和1的文件小8倍。 但是,当我压缩该文件时,由于数据的高度随机性,我的比率非常差。 所以我的问题是。是否有压缩算法,较小的单位是位而不是字节?还是我可以用来降低数据随机性的任何技巧?     
已邀请:
  是否有压缩算法,较小的单位是位而不是字节? 任何基于理智的基于熵的压缩算法都将在“位”级别上工作,从而显示出预期的行为。将仅包含“ 00000001”和“ 00000000”字节的输入传递给编码器时,编码器在某种意义上“看到”该输入包含大量该死的“ 0”位,并产生某些“ 1”-它可以通过使用表(或任何压缩器用来表示其状态的表)来适应这种情况并获得良好的压缩率。 如果您确实使用了一个字节中的所有位,则输入的熵(\“ randomness \”)会高得多,因此,当您输入的输入大小仅为1/8时,您还可以使用压缩器\的工作要困难得多,并且它的压缩率会因此受到影响。无论如何,我绝对认为这是可行的方法,因为您不依赖压缩器,它可能会也可能不会赶上输入数据中的“很多0方案”。   还是我可以用来降低数据随机性的任何技巧? 这些“技巧”涉及对输入数据执行转换以减少输入数据的熵。您在这里可以做什么实际上取决于输入数据的性质。如果它是真正的黑白“图像”,则可能需要看一下JBIG或查看PNG图像标准中定义的转换。     
  但是,当我压缩该文件时,由于数据的高度随机性,我的比率非常差。 压缩比在这里是个红鲱鱼。相反,您应该比较压缩文件的大小。 从理论上讲,压缩文件的大小应该没有差异,因为它是相同的数据。 未压缩的按字节文件将大8倍。但是,它可以很好地压缩(理论上可以压缩到其大小的1/8),但没有比未压缩的压缩位压缩版本更好。 (我假设您正在此处写入8位字节。如果您正在写入32位整数,请用32替换上面的8。)     

要回复问题请先登录注册