資源簡介
今天上了一節組原,講了Hamming Code,對它的代碼實現比較感興趣,于是給自己出了個題目去玩。可以海明編碼,也可海明校驗。
代碼片段和文件信息
from?colorama?import?init??#?顏色庫
init(autoreset=True)
class?valid_bit:??#?有效位
????def?__init__(self?b?i):
????????self.num?=?i??#?序號
????????self.bit?=?int(b)??#?數值
????????self.link?=?[]??#?組成成分,7?=?4?+?2?+?1
class?check_bit:??#?校驗位
????def?__init__(self?i):
????????self.num?=?i??#?序號
????????self.bit?=?None??#?數值
????????self.link?=?[]??#?校驗位
def?smallest_check_number(k):
????r?=?1
????while?2?**?r?-?r?-?1?????????r?+=?1??#?得到最小檢測位數
????return?r
def?is_standard(string):
????return?string.count(‘1‘)?+?string.count(‘0‘)?==?len(string)
def?hamming_encode(string):
????checkList.clear()
????hammingList?=?[]
????hammingList.append(0)??#?填補0位,index即下標
????for?i?in?range(1?len(string)?+?1):
????????locals()[‘b‘?+?str(i)]?=?valid_bit(int(string[i?-?1])?i)
????????hammingList.append(locals()[‘b‘?+?str(i)])??#?先加入b
????r?=?smallest_check_number(len(string))
????for?j?in?range(1?r?+?1):
????????locals()[‘P‘?+?str(j)]?=?check_bit(j)
????????hammingList.insert(2?**?(j?-?1)?locals()[‘P‘?+?str(j)])
????????checkList.append(2?**?(j?-?1))??#?再插入P
????for?i?in?range(1?len(hammingList)):??#?i是有效位,j是檢測位
????????if?i?in?checkList:
????????????continue??#?跳過P
????????remain?=?i
????????for?j?in?range(len(checkList)?-?1?-1?-1):
????????????if?remain?>=?checkList[j]:
????????????????remain?-=?checkList[j]
????????????????hammingList[i].link.append(checkList[j])
????????????if?remain?==?0:
????????????????break
????????for?j?in?hammingList[i].link:
????????????hammingList[j].link.append(i)??#?P的link中加入b的位號
????#?計算檢測碼
????for?j?in?checkList:
????????xor?=?0
????????for?i?in?hammingList[j].link:
????????????xor?=?xor?^?hammingList[i].bit
????????hammingList[j].bit?=?xor
????for?i?in?range(1?len(hammingList)):
????????if?i?in?checkList:??#?檢測碼
????????????print(‘\033[1;33m%d\033[0m‘?%?hammingList[i].bit?end=‘‘)
????????else:
????????????print(‘%d‘?%?hammingList[i].bit?end=‘‘)
????print(‘\n‘)
def?hamming_correct(string):
????checkList.clear()
????hammingList1?=?[]??#?裝位
????hammingList1.append(0)
????k?=?1
????while?k?+?smallest_check_number(k)?!=?len(string):??#?反推r和k
????????k?+=?1
????r?=?smallest_check_number(k)
????for?i?in?range(r):
????????checkList.app
- 上一篇:mod_wsgi.so
- 下一篇:RasaCore官方文檔中文版
評論
共有 條評論