编码原理
指数哥伦布码分为前缀后缀两个部分,非负整数N
的k
阶指数哥伦布码可用如下步骤生成。
直观理解
如上图高亮部分所示,该编码的关键原理在于后缀的值Value
为什么是
N
−
2
k
(
2
m
−
1
)
N-2^k(2^m-1)
N−2k(2m−1),从而我们可以根据Value
解码得到codeNum
。以下我们用N=17
,k=2
为例,进行讲解。
首先,N
的二进制表示是10001
:
① 去除末尾k=2
位后,得到100
;
② 加上1,得到101
,长度为3=m+1
;
③ 再添加上m=2
个前导0和被删除的k=2
位后,得到0010101
。
在这整个过程中,我们来分析一下后缀码,也就是0101
,是如何由N
演变而来的:
在②中,去除末尾k位后加1,相当于原始的N
加上了
2
k
2^k
2k,变成了10101
。
而10101
中最前面的1
并不属于后缀,因此我们需要减去它。注意到10101
的长度是k+(m+1)
,k
是末尾2位,而m+1
是前3位。因此减去最前面的1,也就是在前面的基础上减去
2
m
+
k
2^{m+k}
2m+k。
因此, V a l u e = N + 2 k − 2 m + k = N − 2 k ( 2 m − 1 ) Value=N+2^k-2^{m+k}=N-2^k(2^m-1) Value=N+2k−2m+k=N−2k(2m−1)。