这个压缩算法有名称吗?

时间:2011-04-11 18:41:13

标签: compression

假设您有一个四字节整数,并且希望将其压缩为更少的字节。您能够压缩它,因为较小的值比较大的值更可能(即,值的概率随其幅度减小)。您应用以下方案,以产生1,2,3或4字节结果:

注意,在下面的描述中(位是从1开始的,从最高有效位到最低有效位),即第一位是指最高有效位,第二位是指下一个最高位,等等。 。)

  1. 如果n <128,则将其编码为 第一位设置的单字节 为零
  2. 如果n> = 128且n <16,384, 你使用两个字节的整数。你设定 第一位到第一位,表示 第二位为零。那么你 使用剩余的14位进行编码 数字n。
  3. 如果n> 16,384和 n <2,097,152,你使用三个字节 整数。你将第一位设置为 一,第二位到一位,和 第三位为零。你用的是 剩余的21位,用于编码n。
  4. 如果n> 2,097,152且n <268,435,456, 你使用四字节整数。你设定 前三位到一位和 第四位为零。你用的是 剩下28位来编码n。
  5. 如果n> = 268,435,456且n <4,294,967,296, 你使用一个五字节整数。你设定 前四位为一并使用 以下32位设置 n的精确值,为四个字节 整数。其余的位未使用。
  6. 这个算法有名称吗?

5 个答案:

答案 0 :(得分:3)

听起来与Dlugosz的“可变长度整数编码”非常相似

答案 1 :(得分:3)

这非常接近variable-length quantity编码或base-128。后一个名称源于这样一个事实,即编码中的每个7位单元都可以被视为128位数字。

答案 2 :(得分:2)

Huffman coding指的是使用更少的比特来存储更多的公共数据,以换取使用更多的比特来存储不太常见的数据。

答案 3 :(得分:1)

您的方案类似于UTF-8,这是一种用于Unicode文本数据的编码方案。

主要区别在于UTF-8流中的每个字节都表明它是前导字节还是尾随字节,因此可以从中间开始读取序列。使用您的方案,如果存储了一系列此类值,则缺少前导字节将使文件的其余部分完全不可读。读取这样的序列必须从头开始,而不是任意位置。

答案 4 :(得分:0)

<强> Varint

使用每个字节的高位指示“继续”或“停止”,其余位(序列中每个字节的7位)被解释为编码实际值的纯二进制:

这听起来像Google Protocol Buffers中使用的“Base 128 Varint”。

压缩整数的相关方法

总结:此代码表示2个部分的整数: 一元代码中的第一部分,用于指示在剩余值中读取需要多少位;以及第二部分(以位为单位指示的宽度),以或多或少的纯二进制编码实际值。

这个特殊的代码用二进制代码“整理”一元代码,但是其他相似的代码首先打包完整的一元代码,然后是二进制代码, 例如Elias gamma coding

我怀疑此代码是“开始/停止代码”系列之一 如下所述:

Steven Pigeon - Start/Stop Codes - Procs。 2001年数据压缩会议,IEEE计算机学会出版社,2001年。