压缩递增数据的最佳方法

时间:2012-06-21 09:39:43

标签: c compression x86-64

我有一个向量,我保存一个递增的数据。通常,向量的每个元素都是64位长的变量。但是,很可能两个连续元素之间的差异非常小,所以例如我们可以得到如下序列。

1, 34, 37, 42, 45, 1098, 1200, 1211, 1938

压缩此数据的最佳方法是什么。保持差异是理想的,并且有一个标题字节来定义差异有多大,是否只是一个字节,字,双字等,还是有更好的方法来压缩这些增量数据?

修改

我需要在线压缩,即将数据放入向量中。您可以假设一个动态扩展的向量。

2 个答案:

答案 0 :(得分:5)

这是一个非常简单的策略,适用于增量通常很小的时候:

  1. 如果增量<2 ** 7,则将其作为单个字节发出,最高位设置为零:

    0xxxxxxx
    
  2. 否则,如果增量为&lt; 2 ** 14,则将其作为两个字节发出,其中最高位分别为1和0:

    1xxxxxxx 0xxxxxxx
    
  3. 以明显的方式将此扩展为更大的增量。设置为1的第8位表示“等待,还有更多”。零表示“整数结束”。

  4. 我记得在某些RFC或者internet-draft中看到这个编码方案被建议用于bigints,但我现在似乎无法检索它。或者,您可以重复使用UTF-8编码方案来进行一些改进的错误检测,但代价是编码效率较低(如果您想要超越64位整数,则可能需要对其进行扩展)。

答案 1 :(得分:0)

听起来你需要一些东西(正如你自己所说的那样),就像差分调制一样。也许这会给你一些灵感:http://en.wikipedia.org/wiki/Differential_pulse-code_modulation