3. ERROR DETECTION & CORRECTION
/15
2
「錯誤偵測」。判斷資料是否損毀變異。
例如網路傳輸,如果發現出錯了,麻煩對方馬上
重傳一次就好。身份證字號,最後一碼是驗證碼,
一方面避免卡號連續、一方面避免行政人員輸入
錯誤;如果輸入錯誤,重新輸入就好。
R. W. Hamming, "Error detecting and error correcting
codes," in The Bell System Technical Journal, vol. 29, no.
2, pp. 147-160, April 1950, doi: 10.1002/j.1538-
7305.1950.tb00463.x.
8. My solution
/15
7
#儲存最長的數字距離
for item in nums:
if len(bin(item)) > maxLen:
maxLen = len(bin(item))
#print(bin(item))
maxLen = maxLen - 2 #減掉“0b” 兩個字元
9. My solution
/15
8
#計算漢明距離
for item in list(combinations(nums,2)):
#整數轉2進制
a1 = str(bin(item[0]))[2:].zfill(maxLen)
a2 = str(bin(item[1]))[2:].zfill(maxLen)
for i in range(maxLen):
if a1[i] != a2[i]:
count+=1
print(count)
10. My solution
/15
9
#計算漢明距離
for item in list(combinations(nums,2)):
#整數轉2進制
a1 = str(bin(item[0]))[2:].zfill(maxLen)
a2 = str(bin(item[1]))[2:].zfill(maxLen)
for i in range(maxLen):
if a1[i] != a2[i]:
count+=1
print(count)
13. My solution (optimization)
/15
12
total = 0
#計算漢明距離
for i in range(32):
count = 0 #儲存差異字數
for item in nums:
#判斷位元數1的
if(str(bin(item))[2:].zfill(32)[i] == "1"):
count = count + 1
total = total + (count* (len(nums)-count)) #加總 0乘以1的個
數
print(total)