Elias Gamma Coding对正整数、整数(采用bijection)的编码解码解析

Elias Gamma Coding是一种用于高效存储整数的变长编码方式,通过前导0的数量确定有效位数。正整数编码后会比原数值大1,而负数使用bijection映射,偶数表示负数,奇数表示正数。这种编码在小整数范围内能显著减少bit长度,有利于节省存储空间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 ->
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值