确定用于一系列字节的最佳压缩算法

时间:2009-03-03 06:17:59

标签: compression

对于我的个人项目,我正在写一个小类来压缩和解压缩一个相当模糊的格式。我已经得到了完整的规范,但问题并非如此。

首先,这种'格式'使用一组6种不同的压缩类型以及未压缩的字节数据块。格式是RLE,RLE的一个分支,其中数字递增每个字节(例如3,4,5,...),16位RLE,LZ复制,反向LZ复制和LZ复制Xor' d为255.这不是最干净的规格,但我也没有设计它。

我的压缩例程应该采用1到65535字节之间的数组,并且(希望)尽可能地压缩它。我之前的尝试只是计算出来,从未压缩流中的任何索引开始,上面哪种压缩技术将提供最佳压缩,然后压缩许多字节,方法将压缩到压缩字节数组,然后重复新的“未压缩”指数,例如:

{0,0,0,1,2,3,4}

该算法首先会读取开始时有三个零,然后输出规范使用的RLE编码,然后从第四个元素开始,将读取增量RLE将覆盖'1,2 ,3,4'足够好,并在返回之前压缩它。

总结的问题是,在尝试找出要使用的最佳规范时,即使在小型(20-30)字节数组上,例程也非常慢。任何人都可以提供有关如何优化此功能的提示,或者我是否可以提供更多信息来提供帮助?

1 个答案:

答案 0 :(得分:0)

听起来你正在尝试做的是为文件的每个可能的段(让我们调用你的可变长度1-64K块段)计算出大量的压缩可能性。如果我错了,请纠正我,但是你是否正在根据以下选择对第一段进行最佳压缩(方法0未压缩):

  • 压缩方法0,长度为1个字节。
  • 压缩方法1,长度为1个字节。
  • :::::
  • 压缩方法6,长度为1个字节。
  • 压缩方法0,长度为2个字节。
  • 压缩方法1,长度为2个字节。
  • :::::
  • 压缩方法6,长度65534字节。
  • 压缩方法0,长度65535字节。
  • 压缩方法1,长度65535字节。
  • 压缩方法2,长度65535字节。
  • 压缩方法3,长度65535字节。
  • 压缩方法4,长度65535字节。
  • 压缩方法5,长度65535字节。
  • 压缩方法6,长度65535字节。

这需要花费大量时间(每个段大约420,000次压缩尝试)。如果您正在做的事情,那么最好选择单个段大小(例如,64K)并将七种压缩方法中的每一种应用于其中以选择最佳。然后,对于每个段,输出“方法”字节,然后输出压缩数据。