(軟考)傻子都能看懂的 海明碼

2021-08-30 08:43:10 字數 1345 閱讀 1199

看了很多大佬的解析,自己來整理一套詳盡到通俗易懂的。

海明碼定義:具有糾正一位錯誤的能力。

核心公式:2^r ≥k+r+1   (其中r代表校驗個數)

(重要!)從公式帶入計算可得一張表:

記住這張表,選擇題就可以秒答。

(a:假設有8位資訊位,則需要插入____位校驗碼呀?q: 4位。) 

核心:校驗碼pi 必須是在2的n次方位置,即只能放在h1,h2,h4,h8...

注意:這裡指的位置都是從左向右排序,即:...h5 h4 h3 h2 h1

以下以4位資訊碼為例進行編碼。

資訊碼組:1101  -----即: d3 d2 d1 d0 = 1 1 0 1

根據公式:2^r ≥k+r+1(或者表)得校驗位 r=3,即校驗位為 p1 p2 p3。

又因為上述pi 只能放在2的n次方的位置,所以 p1插入h1,p2插入h2,p3插入h4。

資訊碼填入剩下的位置。

即:d0為h3,d1為h5,d2為h6,d3為h7

= d3 d2 d1 p3 d0 p2 p1

代入數字  =  1   1    0  p3  1   p2 p1

根據:h3 = h1+h2   (右下標之和等於左下標。)

h5 = h1+h4

h6 = h2 + h4

h7 = h1 + h2 + h4

可得:p1(h1) = h3 ⊕ h5 ⊕ h7 (⊕表示異或,即:與h1有關的資訊碼進行異或)

p2(h2) = h3 ⊕ h6 ⊕ h7

p3(h4) = h5 ⊕ h6 ⊕ h7

計算可得:p1 = 0,p2 = 1,p3 = 0

所以:最終海明碼: h7 h6 h5 h4 h3 h2 h1 = 1 1 0 0 1 1 0

設檢測位g1,g2,g3:

則有:g1 = p1 ⊕ h3 ⊕ h5 ⊕ h7 ;

g2 = p2 ⊕ h3 ⊕ h6 ⊕ h7;

g3 = p3 ⊕ h5 ⊕ h6 ⊕ h7;

當偶校驗時:g3 g2 g1 值皆為0則資料無誤,若g3 g2 g1不全為0說明資料傳輸有誤,且其十進位制指出了錯誤發生的位置。

(例:g3 g2 g1 = 101,其十進位制為 5 ,即:h5 發生了錯誤,h5的位置為d1,則說明d1傳輸錯誤,則將d1的位置取反,即可糾錯。)

所以海明碼定義:具有糾正一位錯誤的能力。

over,以上如有錯誤,溫柔指出。

傻子都能看懂的並查集入門

其實並查集顧名思義就是有 合併集合 和 查詢集合 兩種操作的關於資料結構的一種演算法。並查集演算法不支援分割乙個集合。用集合中的某個元素來代表這個集合,該元素稱為集合的代表元。乙個集合內的所有元素組織成以代表元為根的樹形結構。對於每乙個元素 parent x 指向x在樹形結構上的父親節點。如果x是根...

傻子都能看懂的並查集入門

其實並查集顧名思義就是有 合併集合 和 查詢集合中的元素 兩種操作的關於資料結構的一種演算法。並查集演算法不支援分割乙個集合。用集合中的某個元素來代表這個集合,該元素稱為集合的代表元。乙個集合內的所有元素組織成以代表元為根的樹形結構。對於每乙個元素 parent x 指向x在樹形結構上的父親節點。如...

傻子都能看懂的並查集入門

其實並查集顧名思義就是有 合併集合 和 查詢集合中的元素 兩種操作的關於資料結構的一種演算法。並查集演算法不支援分割乙個集合。用集合中的某個元素來代表這個集合,該元素稱為集合的代表元。乙個集合內的所有元素組織成以代表元為根的樹形結構。對於每乙個元素 parent x 指向x在樹形結構上的父親節點。如...