Elias Gamma Coding是干什么用的?
一种对整数的变长编码格式,目的是尽量用少的bit位来描述整数,所以编码出来的bit位数是变长的,因为是变长的编码格式首先应该解决一个问题,就是编码长度到哪里结束?因此该编码使用开始处补一定数量的0来统计整数有效部分的bit长度,比如9(正整数)编码之后得到0001010,在解释该bit的时候通过数0来判断后面的位数,观察该编码结果可以知道,第一个1前面有3个0,因此可以认定1后面有3位是有效位,所以获取1010然后转为正整数=10,最后需要10-1,最终得到9,解码结束。
为什么最后要-1?
因为为了支持0的编码,所以每一个正整数编码之后的二进制都是比自己大1。
正整数编码理解了,如果要进行负数的编码怎么办?
负数使用bijection(双射)来进行编码,编码的时候偶数全部映射成负数,奇数全部映射成正数。
bijection 是什么?
双射,可以理解为令偶数表示正数、奇数表示负数,这样可表示的信息量就增大了但是存储量也会变为之前的两倍
例如从-5~5的编码后的结果为:
-5 -> 0001010
-4 -> 0001000
-3 -> 00110
-2 -> 00100
-1 -> 010
0 -> 1
1 -> 011
2 -> 00101
3 -> 00111
4 -> 0001001
5 ->