看了很多大佬的解析,自己來整理一套詳盡到通俗易懂的。
海明碼定義:具有糾正一位錯誤的能力。
核心公式: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在樹形結構上的父親節點。如...