VB编码, Gamma编码, Delta编码
VB編碼, Gamma編碼, Delta編碼
- 1. VB code
- 2. Gamma(γ) code
- 3. Delta(δ) code
學(xué)習(xí)筆記,記錄VB編碼, Gamma編碼, Delta編碼的自動(dòng)計(jì)算代碼。
1. VB code
例:十進(jìn)制數(shù)824使用vb code進(jìn)行編碼
(1)將十進(jìn)制數(shù)824轉(zhuǎn)化為十六進(jìn)制338
(2)將16進(jìn)制中的每一位數(shù)當(dāng)成單個(gè)十進(jìn)制數(shù)后轉(zhuǎn)換為二進(jìn)制的四位數(shù),然后連接起來(lái)0011 0011 1000
(3)去除開(kāi)頭所有0,得到1100111000
(4)通過(guò)在開(kāi)頭加0的方式,將字符串拆分為7個(gè)一組,得到0000110和0111000
(5)在最后一個(gè)7位數(shù)前面加1,其余不代表終止的7位數(shù)前面加0,湊成8個(gè)一組
(6)最終結(jié)果為:
00000110 10111000
編碼代碼,輸入原始數(shù)字輸出字符串:
def vb_encoding(ori_data):code = hex(ori_data)[2:]result = ''for i in code:temp = bin(int(i,10))[2:]if len(temp) < 4:temp = '0'*(4-len(temp)) + tempresult = result + temp# 去除開(kāi)頭的0result = result.lstrip('0')# 補(bǔ)全到7的倍數(shù)if len(result) % 7 != 0:result = '0'*(7-len(result) % 7) + result# 拆分為多行result_list = []result_list.append('0' + result[:7])while len(result) != 7:result = result[7:]result_list.append('0' + result[:7])result_list[-1] = '1' + result_list[-1][1:]return result_list解碼代碼,輸入二進(jìn)制字符串得到多個(gè)原始數(shù)字:
def vb_decoding(bin_data):bin_data = bin_data.replace(" ", "")result = []while len(bin_data) != 0:t = 0while bin_data[t*8] != '1':t += 1# 獲取當(dāng)前數(shù)字的字符串if len(bin_data) == (t+1)*8:cut = bin_databin_data = ''else:cut = bin_data[:(t+1)*8]bin_data = bin_data[(t+1)*8:]# 開(kāi)始還原數(shù)字code = []for i in range(len(cut)//8-1):code.append(cut[i*8: (i+1)*8])code.append(cut[-8:])code = list(map(lambda x:x[1:], code))code = ''.join(code)code = code.lstrip('0')if len(code) % 4 != 0:code = '0' * (4 - len(code) % 4) + codetemp_bin = []for i in range(len(code)//4-1):temp_bin.append(code[i*4: (i+1)*4])temp_bin.append(code[-4:])temp_bin = list(map(lambda x:str(int(x,2)), temp_bin))number = int(''.join(temp_bin), 16)result.append(number)return result2. Gamma(γ) code
Gamma編碼
對(duì)數(shù)字k
(1) kd = (log2(K))向下取整
(2) kr = K - 2^kd
kd使用unary表示,即在用kd個(gè)1加上一個(gè)0
kr使用binary表示,即用二進(jìn)制編碼表示kr
編碼代碼,輸入原始數(shù)字輸出字符串:
def gamma_encoding(ori_data):kd = math.floor(math.log2(ori_data))kr = ori_data - 2**kdresult = '1'*kd+'0'+bin(kr)[2:]return result解碼代碼,輸入二進(jìn)制字符串得到多個(gè)原始數(shù)字:
def gamma_decoding(bin_data):bin_data = bin_data.replace(" ", "")number_list = []while len(bin_data) != 0:index_of_zero = None# 找到第一個(gè)0的位置for i in range(len(bin_data)):if bin_data[i] == '0':index_of_zero = ibreakif index_of_zero == None:return "error string"# 如果第一個(gè)就是0if index_of_zero == 0:number_list.append(1)bin_data = bin_data[1:]# 否則else:bin_data = bin_data[index_of_zero + 1:]kd = index_of_zerotran_kr = bin_data[:kd]kr = int(tran_kr, 2)bin_data = bin_data[kd:]ori_num = 2 ** kd + krnumber_list.append(ori_num)return number_list3. Delta(δ) code
在Gamma編碼的基礎(chǔ)上,對(duì)kd再進(jìn)行一次gamma編碼得到kdd與kdr,從而進(jìn)一步縮短編碼的長(zhǎng)度。
編碼代碼,輸入原始數(shù)字輸出字符串:
def delta_encoding(ori_data):kd = math.floor(math.log2(ori_data))kr = ori_data - 2**kdtran_kr = bin(kr)[2:]# 因?yàn)楹竺鎘d要+1,所以這里先編碼完最后一段if len(tran_kr) < kd:tran_kr = '0'*(kd-len(tran_kr)) + tran_krkd = kd + 1kdd = math.floor(math.log2(kd))kdr = kd - 2**kddtran_kdd = '1'*kdd + '0'tran_kdr = bin(kdr)[2:]if len(tran_kdr) < kdd:tran_kdr = '0'*(kdd-len(tran_kdr)) + tran_kdrresult = tran_kdd + ' ' + tran_kdr + ' ' + tran_kr#print("kdd:", kdd, ", kdr:", kdr, ", kd:",kd,", kr:", kr)return result解碼代碼,輸入二進(jìn)制字符串得到多個(gè)原始數(shù)字:
def delta_decoding(bin_data):bin_data = bin_data.replace(" ", "")number_list = []while len(bin_data) != 0:index_of_zero = None# 找到第一個(gè)0的位置for i in range(len(bin_data)):if bin_data[i] == '0':index_of_zero = ibreakif index_of_zero == None:return "error string"# 如果第一個(gè)就是0if index_of_zero == 0:number_list.append(1)bin_data = bin_data[1:]# 否則else:bin_data = bin_data[index_of_zero + 1:]kdd = index_of_zerotran_kdr = bin_data[:kdd]kdr = int(tran_kdr,2)bin_data = bin_data[kdd:]kd = 2**kdd + kdr - 1tran_kr = bin_data[:kd]kr = int(tran_kr,2)bin_data = bin_data[kd:]ori_num = 2**kd + krnumber_list.append(ori_num)return number_list總結(jié)
以上是生活随笔為你收集整理的VB编码, Gamma编码, Delta编码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 树莓派使用cups连接三星打印机(Sam
- 下一篇: 汽车工业能效管理平台助力能源管理体系的建