Python中的 Elias Gamma 编码
Elias gamma 代码是一种通用代码,用于对正整数序列进行编码。它是由彼得埃利亚斯开发的。当无法预先确定整数的上限时,它最有用。
编码步骤:
编码一个数字 X,
- 找到最大的 N,用
(2的更大幂)。 - 使用一元编码对 N 进行编码(即 N 个零,后跟一个 1)。
- 追加整数在二进制中使用 N 个数字。
示例:让我们考虑一个要编码 10 的示例,
我们可以将 10 表示为:
.
Step1 :这里,最大的 N = 3
第2步:一元中的N(= 3)后跟一个= 0001
第3步:现在使用N(= 3)位数字表示2的二进制= 010
因此,Elias 伽马编码10 = 0001010
下面是上述方法的实现。
# Python3 implementation
from math import log
log2 = lambda x: log(x, 2)
def Unary(x):
return (x-1)*'0'+'1'
def Binary(x, l = 1):
s = '{0:0%db}' % l
return s.format(x)
def Elias_Gamma(x):
if(x == 0):
return '0'
n = 1 + int(log2(x))
b = x - 2**(int(log2(x)))
l = int(log2(x))
return Unary(n) + Binary(b, l)
print(Elias_Gamma(10))
输出:
0001010