日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VB编码, Gamma编码, Delta编码

發布時間:2024/3/26 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VB编码, Gamma编码, Delta编码 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

VB編碼, Gamma編碼, Delta編碼

  • 1. VB code
  • 2. Gamma(γ) code
  • 3. Delta(δ) code

學習筆記,記錄VB編碼, Gamma編碼, Delta編碼的自動計算代碼。

1. VB code

例:十進制數824使用vb code進行編碼
(1)將十進制數824轉化為十六進制338
(2)將16進制中的每一位數當成單個十進制數后轉換為二進制的四位數,然后連接起來0011 0011 1000
(3)去除開頭所有0,得到1100111000
(4)通過在開頭加0的方式,將字符串拆分為7個一組,得到0000110和0111000
(5)在最后一個7位數前面加1,其余不代表終止的7位數前面加0,湊成8個一組
(6)最終結果為:
00000110 10111000

編碼代碼,輸入原始數字輸出字符串:

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# 去除開頭的0result = result.lstrip('0')# 補全到7的倍數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

解碼代碼,輸入二進制字符串得到多個原始數字:

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# 獲取當前數字的字符串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:]# 開始還原數字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 result

2. Gamma(γ) code

Gamma編碼
對數字k
(1) kd = (log2(K))向下取整
(2) kr = K - 2^kd
kd使用unary表示,即在用kd個1加上一個0
kr使用binary表示,即用二進制編碼表示kr

編碼代碼,輸入原始數字輸出字符串:

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

解碼代碼,輸入二進制字符串得到多個原始數字:

def gamma_decoding(bin_data):bin_data = bin_data.replace(" ", "")number_list = []while len(bin_data) != 0:index_of_zero = None# 找到第一個0的位置for i in range(len(bin_data)):if bin_data[i] == '0':index_of_zero = ibreakif index_of_zero == None:return "error string"# 如果第一個就是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_list

3. Delta(δ) code

在Gamma編碼的基礎上,對kd再進行一次gamma編碼得到kdd與kdr,從而進一步縮短編碼的長度。

編碼代碼,輸入原始數字輸出字符串:

def delta_encoding(ori_data):kd = math.floor(math.log2(ori_data))kr = ori_data - 2**kdtran_kr = bin(kr)[2:]# 因為后面kd要+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

解碼代碼,輸入二進制字符串得到多個原始數字:

def delta_decoding(bin_data):bin_data = bin_data.replace(" ", "")number_list = []while len(bin_data) != 0:index_of_zero = None# 找到第一個0的位置for i in range(len(bin_data)):if bin_data[i] == '0':index_of_zero = ibreakif index_of_zero == None:return "error string"# 如果第一個就是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

總結

以上是生活随笔為你收集整理的VB编码, Gamma编码, Delta编码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。