void k_exp_golobm_binariztion(int k, int number)
{
while (1)
{
if (number >= (1 << k))
{
cout << 1;
number -= 1 << k;
k++;
}
else{
cout << 0;
while (k--)
{
cout << ((number >> k) & 0x01);
}
break;
}
}
cout << endl;
}
分组为:
2k,2k+1,2k+2,...
等比数列前n项和:
sn=a1(1−qn)1−q
所以k阶指数哥伦布编码的第n项前缀解码为:
a1=2k,q=2,j为分组号(第一个0前面1的个数,第一个0为分隔符)
pref(an)=2k(1−2j)1−2=2k(2j−1)
比如k=1时的哥伦布编码:
k:1 i:0 00 i:1 01 i:2 1000 i:3 1001 i:4 1010 i:5 1011 i:6 110000 i:7 110001 i:8 110010 i:9 110011 i:10 110100 i:11 110101 i:12 110110 i:13 110111 i:14 11100000 i:15 11100001 i:16 11100010 i:17 11100011 i:18 11100100 i:19 11100101 i:20 11100110 i:21 11100111 i:22 11101000 i:23 11101001 i:24 11101010 i:25 11101011 i:26 11101100 i:27 11101101 i:28 11101110 i:29 11101111
110000 前缀解码过程为:
pref(a6)=21(22−1)=2∗3=6
后缀的比特数为 k+j 。
an=pref(an)+suff(an)
比如:
a23=21(23−1)+9=14+9=23