整数压缩算法zigzag¶
Theorem
压缩编码应满足:高概率的码字字长不低于低概率的码字字长
Zigzag利用这个思想,使用较多的应为小整数,较小的整数应使用较少的byte来编码。
encoder¶
Zigzag按绝对值升序排列,将整数hash成递增的bit流,例如对于32位整数,hash函数为\(h(x) = (x << 1) ^ (x >> 31)\) 这里\(x >> 31\)对于整数来说是\(0x00000000\),对于负数,则是\(0xffffffff\),于是就可以将整数按绝对值升序完成hash
考虑编码策略,一个直接想法是去掉编码后代码的前导零。但是这样就不符合编码为前缀码的要求了,于是我们需要进行前缀化操作