假设您有一个四字节整数,并且希望将其压缩为更少的字节。您能够压缩它,因为较小的值比较大的值更可能(即,值的概率随其幅度减小)。您应用以下方案,以产生1,2,3或4字节结果:
注意,在下面的描述中(位是从1开始的,从最高有效位到最低有效位),即第一位是指最高有效位,第二位是指下一个最高位,等等。 。)
这个算法有名称吗?
答案 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年。