数据压缩速成课程-02 integer_codes

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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值