github课程翻译
https://github.com/jermp/data_compression_course
数据压缩速成课-1-introduction
文章目录
前言
静态正整数编码问题:
- Problem:对于一个正整数x>0,我们需要设计一个算法来用尽可能少的bits来表示x;
- 码字:C(x)表示对x使用编码算法后形成的bit-string码字。
- 静态编码:不管待编码内容L是什么数据,都为其中的每个元素分配相同的码字C(x).
一、二元和一元编码
1. 二元编码
编码规格如下
x :B(x)
1: 0
2: 1
3: 10
4: 11
5: 100
6: 101
7: 110
8: 111
L=[3,5,2,6,12,8]——> 10.100.1.101.1011.111
如何从编码后的数据恢复原始数据,是一个难题?
2.一元编码
编码思路:用1来表示有效数据,用0作为区分码字的保留符号。如果x>0,则编码后U(x) = 1^(x-1)0,(x-1)个1加上末尾一个0.|U(x)| = x.
编码规则如下
x U(x)
1 0
2 10
3 110
4 1110
5 11110
6 111110
7 1111110
8 11111110
这种编码方式只对非常小的数比较友好。当数值较大,U(16) = 1111111111111110 16bits来编码16,编码效率极差。
二、Gamma 和 Delta
码字由两部分[ ][ ]组成,第一部分以一元编码形式存储正整数所需的最小位数,第二部分以二进制形式表示整数去除有效位的部分。
Decoding billions of integers per second through vectorization
三、Golomb-Rice
编码思路:用除法减小x的幅值。给定一个参数b,x/b的商使用一元编码,余数x%b使用2进制编码,当b=2^n,成为riceCoding.
四、Exponential Golomb
编码思路:用不同的参数b,进行多个Golomb编码。根据有效数据分布空间连续的特性,对出现频率较高的部分使用较短的码字,出现频率较低的部分使用较长的码字。
五、Fibonacci
编码思路:该想法基于Zeckendorf定理,该定理指出,每个正整数可以唯一地写为不同的非相邻斐波那契数之和(0、1、1、2、3、5、8、13、21、34、55, 89,141,………)。 特定整数的斐波那契代码字正好是整数的Zeckendorf表示形式,其数字顺序相反,并且在末尾附加了附加的“ 1”。附加的1表示代码的末尾,不会出现两个连续的1.
六、可变字节
编码思路:码字是字节byte对齐的,而不是比特bit对齐。
- 字节对齐编码在实际使用中非常有帮助,因为计算机内存是以字节而不是以bit来分配的。实施起来更简单,编解码速度更快。对压缩率没有突出贡献。
- 在可变字节编码中,x的二进制表示被分为若干个字节:每个字节中,7个bit用来表示数据本身,余下1位用来标志字节流的连续和终止状态。
- 只对大的正整数有效。
- 一个简单的变形是用4bit(3bit表示数据,1bit表示控制位)表示的bibble coding。
七、效率、信息包含、熵、Kraft-McMillan inequality
- 效率:对于较小的数据,例如64,使用二值编码效率较高。
- 信息包含:编码的有效性取决于待编码数据在信息L中是如何分布的。
- 熵:在信息熵的极限范围内进行编码。
- 0冗余编码:如何分配的码字长度对所有待编码数字都是恰好适用的。称为0冗余编码。
- 克拉夫特不等式:给出了一个码字长度集合存在唯一可解编码/单义可译码(uniquely decodable code)的必要条件。
给定符号{Xi}i=1~m,编码C对每个Xi使用长度为Ki的码字进行编码,C是唯一可解的,当且仅当
SUM( 2^(-Ki))i=1~m <=1.
总结
以上就是今天要讲的内容,本文仅仅简单介绍了正整数的编码方法,还有更多资料大家自己去扩展。
扩展阅读
• Section 2 of:
G. E. P. and Rossano Venturini. 2020. Techniques for Inverted Index Compression. ACM Computing
Surveys. 53, 6, Article 125 (November 2021), 36 pages. https://doi.org/10.1145/3415148
• Section 2.1-2.2 and Chapter 3 of:
Alistair Moffat and Andrew Turpin. 2002. Compression and coding algorithms.
Springer Science & Business Media, ISBN 978-1-4615-0935-6.
• Sections 1.1-1.5, 2.4, 2.19, 2.22, 2.23 of:
David Salomon. 2007. Variable-Length Codes for Data Compression.
Springer Science & Business Media, ISBN 978-1-84628-959-0.
• Sections 2.1-2.2-2.3 of:
Gonzalo Navarro. 2016. Compact Data Structures. Cambridge University Press, ISBN
978-1-107-15238-0.