Elias Gamma Coding
来源:互联网 发布:手机mac是唯一的吗 编辑:程序博客网 时间:2024/06/07 03:41
Elias Gamma Coding
即Gamma编码,是一种对正整数进行编码的统一编码,由Peter Elias发明。适用于预先无法获知最大编码整数的情况,而且小整数出现频率高,大整数出现频率低的情况。
编码原理:
对任何正整数NUM,对INT(Log2(NUM))+1进行一元编码,后缀上NUM二进制串除去最高位的子串。如5的编码为001,01。
编码示例:
NUM
EliasGamma Code
Implied probability
1 = 20 + 0
1
1/2
2 = 21 + 0
010
1/8
3 = 21 + 1
011
1/8
4 = 22 + 0
00100
1/32
5 = 22 + 1
00101
1/32
6 = 22 + 2
00110
1/32
7 = 22 + 3
00111
1/32
8 = 23 + 0
0001000
1/128
9 = 23 + 1
0001001
1/128
编码、解码算法:
/****************************************************Encode_EliasGamma:Encoding algorithm of EliasGamma Coding.*****************************************************/int Encode_EliasGamma(int *pSourceData,char *pEncodedData,int nSourceDataLen,int &nEncodedDataLen){ //Encoding EliasGamma Coding.int k=-1; for(int i=0;i<nSourceDataLen;i++) { int num = pSourceData[i]; int numPow = int(log10(num + 0.0)/log10(2+ 0.0));int j = 0; for ( j=0; j < numPow; j++) pEncodedData[++k]=0; pEncodedData[++k]=1;for (j=numPow-1; j >= 0; j--) { if (num & 1 << j) pEncodedData[++k]=1; else pEncodedData[++k]=0; } nEncodedDataLen=k+1;}//End of Encoding.return 1;}/****************************************************Decode_EliasGamma:Decoding algorithm of EliasGamma Coding.*****************************************************/int Decode_EliasGamma(int *pDecodedData,char *pEncodedData,int &nDecodedDataLen,int nEncodedDataLen){int i=0,j=0;while (1) {int numPow = 0; while (!pEncodedData[i++]) numPow++; if(numPow >=48) break; int num = 0; for (int h=numPow-1; h >= 0; h--) if (pEncodedData[i++]) num |= 1 << h; num |= 1 << numPow; pDecodedData[j++]=num; } nDecodedDataLen=j;return 1;}
- Elias Gamma Coding
- Uva-11632-Elias gamma coding
- 压缩算法之Elias Gamma Coding & Elias Delta Coding
- Elias Gamma Coding对正整数、整数(采用bijection)的编码解码解析
- Elias Delta Coding
- java实现 Elias Gamma 编码算法
- Elias编码
- gamma
- gamma
- Gamma
- gamma
- Coding
- Coding
- coding
- coding
- coding
- coding
- Coding
- Linux操作系统上建立手机WAP网关的方法
- Econsultancy:提高购物网站产品页面转化率的10大杀招
- CentOS 5.5下LVM的分区管理
- 简单DP
- 如何调试DX程序
- Elias Gamma Coding
- PhoneGap 插件简介
- BNU 三国杀
- 如何使用W7100A模拟I2C总线
- 海量数据处理之数据库索引
- dll 和lib的调用方式
- Apache配置详解(最好的APACHE配置教程)
- pythonchallenge--8
- javascript常用跳转代码