Python 中的 Elias Delta 解码
在本文中,我们将使用 python 实现 Elias Delta 解码。
彼得·埃利亚斯设计了埃利亚斯德尔塔码,这是一个编码正整数的通用系统。
语法:
Elias Delta 编码(X)= Elias Gamma 编码(1+floor(log2(X))) +无 MSB 的 X 的二进制表示。
进场:
- 导入所需的库并从用户处读取编码的二进制字符串。
- 从最高有效位开始读取/计数零的数量,直到看到第一个“1”,并将其存储在名为“L”的变量中
语法:
L=0
while True:
if not x[L] == '0':
break
L= L + 1
- 将“1”视为第一位,读取更多的 1 位,并丢弃所有位,直到当前的 1 位。
- 取出剩余的位,在最高有效位前加上“1”。
语法:
x.insert(0,' 1 ')
- 将最终的二进制数转换成整数,从而得到原始的数字。
示例:
假设输入的编码字符串是 01111
步骤 1: 从最高有效位读取/计数零的数量,直到看到第一个“1”,并将其存储在“L”中,直到看到第一个“1”
在我们的例子中,L=1
第二步:将‘1’视为第一位,多读 L 位(多读 1 位)并丢弃所有内容。
~~011~~ 11= 11
步骤 3: 取出剩余的位,并在 MSB 中加上“1”。
One hundred and eleven
步骤 4: 将最终的二进制字符串转换为整数,这样我们就得到 7。
下面是实现。
示例 1: 生成对应于某个值的 Elias Delta 解码值的示例。
Python 3
import math
def Elias_Delta_Decoding(x):
x = list(x)
L = 0
while True:
if not x[L] == '0':
break
L = L + 1
# Reading L more bits and dropping ALL
x = x[2*L+1:]
# Prepending with 1 in MSB
x.reverse()
x.insert(0, '1')
n = 0
# Converting binary to integer
for i in range(len(x)):
if x[i] == '1':
n = n+math.pow(2, i)
return int(n)
x = '01111'
print(Elias_Delta_Decoding(x))
输出:
7
示例 2: 生成对应于某个值的 Elias Delta 解码值的示例
计算机编程语言
import math
def Elias_Delta_Decoding(x):
x = list(x)
L=0
while True:
if not x[L] == '0':
break
L= L + 1
# Reading L more bits and dropping ALL
x=x[2*L+1:]
# Prepending with 1 in MSB
x.insert(0,'1')
x.reverse()
n=0
# Converting binary to integer
for i in range(len(x)):
if x[i]=='1':
n=n+math.pow(2,i)
return int(n)
x = '0111100'
print(Elias_Delta_Decoding(x))
输出:
28
版权属于:月萌API www.moonapi.com,转载请注明出处