📜  Python中的 Elias Gamma 编码

📅  最后修改于: 2022-05-13 01:54:55.469000             🧑  作者: Mango

Python中的 Elias Gamma 编码

Elias gamma 代码是一种通用代码,用于对正整数序列进行编码。它是由彼得埃利亚斯开发的。当无法预先确定整数的上限时,它最有用。

编码步骤:

编码一个数字 X,

  • 找到最大的 N,用
    2^{N}\leq X (2的更大幂)。
  • 使用一元编码对 N 进行编码(即 N 个零,后跟一个 1)。
  • 追加整数(X-2^{N})在二进制中使用 N 个数字。

示例:让我们考虑一个要编码 10 的示例,
我们可以将 10 表示为:
10=2^{3} + 2 .
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