压缩算法之Elias Gamma Coding & Elias Delta Coding

压缩算法之Elias Gamma Coding & Elias Delta Coding

Posted by Andrew(justAStriver@gmail.com)

2013-02-24

基本概念

压缩算法一般根据应用场景不同可分为文本压缩和索引压缩,后者是搜索引擎的核心技术之一。压缩的本质是对数据进行重新编码,编码依据是数据的分布特性,一般是概率分布情况,比如对于倒排索引中的数字编号。数值分布一般符合指数分布,均匀分布,Elias Gamma/Delta主要是基于这两种分布的。

压缩模型可分为全局模型,局部模型,局部模型参数可动态调整,算法复杂度高,压缩解压缩速度慢,但压缩率高。在编码方式上可分为定长和变长编码。

Elias Gamma/Elias Delta算法适合小整数使用频率较高的场景。它们都是基于数字分解的算法,都需要使用到下面两种基本的编码方式:

1.一元编码-Unary

主要适合于指数分布的数值分布,对于数字N,一元编码的编码长度为N,使用N-1个二进制1和末尾一个0表示,如数字3的一元编码为:110

2.二进制编码-Binary

    主要适合于均匀分布的数值分布,对于数字N的二进制编码,其实就是它在计算机中的实际存储格式。也就是十进制对应的二进制,如3的二进制为11。在二进制编码中,比特宽度会在具体的压缩算法中不一样,比如数字3如果用5个比特宽度则为:00011

Elias Gamma Coding算法过程

1.对于数字x分解成 x=2M

2.对于N+1使用一元编码

3.对于M使用比特宽度为N的二进制编码

    举例:比如对于数字13,可分解成:13 =2+ 5,即N=3,M=5,则N+1的一元编码为:1110;M的比特宽为3的二进制编码为:101,最后的Elias Gamma Coding为:1110:101.

Elias Delta Coding算法过程

该算法是在Gamma算法基础上的改进,目的是为了对N进一步压缩,可以处理更大的数值。算法过程如下:

1.对于数字x分解成 x=2M

2.对于N+1使用进一步分解成N+1=2N1 

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值