선형대수학 과 컴퓨터 과학 에서 해밍 부호 (해밍符號, 영어 : Hamming code 해밍 코드[* ] )는 이진 선형 부호 의 일종이다.[1] 거리가 3이므로, 1개 이하의 오류를 교정할 수 있으며, 2개 이하의 오류의 존재를 발견할 수 있다.
해밍 부호 는 임의의 (소수 거듭제곱) 진법에 대하여 정의되는, 거리 3의 선형 부호 이다. 이 가운데 이진 해밍 부호는 정의하기가 특별히 간단하다.
다음 데이터가 주어졌다고 하자.
2 이상의 정수 r ∈ { 2 , 3 , 4 , … } {\displaystyle r\in \{2,3,4,\dotsc \}} 그렇다면, 다음과 같은, F 2 {\displaystyle \mathbb {F} _{2}} 계수의 r × 2 r − 1 {\displaystyle r\times 2^{r}-1} 행렬 H {\displaystyle H} 를 정의할 수 있다.
H i , j = j i ( 1 ≤ i ≤ r , j = j r + 2 j r − 1 + 4 j r − 2 + 8 j 4 + ⋯ + 2 r − 1 j 1 , j 1 , … , j r ∈ { 0 , 1 } ) {\displaystyle H_{i,j}=j_{i}\qquad (1\leq i\leq r,\quad j=j_{r}+2j_{r-1}+4j_{r-2}+8j_{4}+\dotsb +2^{r-1}j_{1},\quad j_{1},\dotsc ,j_{r}\in \{0,1\})} 즉, H {\displaystyle H} 의 j {\displaystyle j} 번째 열의 성분들은 j {\displaystyle j} 의 이진법 표기의 성분들이다. 예를 들어, r = 3 {\displaystyle r=3} 일 때 H {\displaystyle H} 는 다음과 같은 3×7 행렬이다.
H = ( 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 1 0 1 0 1 ) {\displaystyle H={\begin{pmatrix}0&0&0&1&1&1&1\\0&1&1&0&0&1&1\\1&0&1&0&1&0&1\end{pmatrix}}} 이제, H {\displaystyle H} 를 패리티 확인 행렬 로 갖는 이진 선형 부호
C = ker H {\displaystyle C=\ker H} 를 r {\displaystyle r} -이진 해밍 부호 또는 [ 2 r − 1 , 2 r − 1 − r , 3 ] 2 {\displaystyle [2^{r}-1,2^{r}-1-r,3]_{2}} -해밍 부호 라고 한다.
보다 일반적으로, 다음이 주어졌다고 하자.
소수 거듭제곱 q ∈ { 2 , 3 , 4 , 5 , 7 , 8 , 9 , 11 , … } {\displaystyle q\in \{2,3,4,5,7,8,9,11,\dotsc \}} 2 이상의 정수 r ∈ { 2 , 3 , 4 , … } {\displaystyle r\in \{2,3,4,\dotsc \}} 그렇다면, 유한체 F q {\displaystyle \mathbb {F} _{q}} 위의 r {\displaystyle r} 차원 벡터 공간 F q r {\displaystyle \mathbb {F} _{q}^{r}} 및 r − 1 {\displaystyle r-1} 차원 사영 공간
P F q r − 1 = F q r ∖ { 0 → } u ∼ v ⟺ ∃ λ ∈ F q × : u = λ v {\displaystyle \mathbb {P} _{\mathbb {F} _{q}}^{r-1}={\frac {\mathbb {F} _{q}^{r}\setminus \{{\vec {0}}\}}{u\sim v\iff \exists \lambda \in \mathbb {F} _{q}^{\times }\colon u=\lambda v}}} 을 구성할 수 있다. 다시 말해, 사영화 몫 함수
F q r ∖ { 0 → } ↠ P F q r − 1 {\displaystyle \mathbb {F} _{q}^{r}\setminus \{{\vec {0}}\}\twoheadrightarrow \mathbb {P} _{\mathbb {F} _{q}}^{r-1}} 는 집합 F q r ∖ { 0 → } {\displaystyle \mathbb {F} _{q}^{r}\setminus \{{\vec {0}}\}} 위에 동치 관계 를 정의하며, 그 동치류 의 수는 다음과 같다.
| F q r ∖ { 0 → } | | F q × | = q r − 1 q − 1 {\displaystyle {\frac {|\mathbb {F} _{q}^{r}\setminus \{{\vec {0}}\}|}{|\mathbb {F} _{q}^{\times }|}}={\frac {q^{r}-1}{q-1}}} 이제, 각 동치류에서 임의의 대표원을 고를 수 있으며, 이 대표원들을 열벡터로 삼아 F q {\displaystyle \mathbb {F} _{q}} 성분의 r × ( q r − 1 ) / ( q − 1 ) {\displaystyle r\times (q^{r}-1)/(q-1)} 행렬
H ∈ Mat ( r , ( q r − 1 ) / ( q − 1 ) ; F q ) {\displaystyle H\in \operatorname {Mat} (r,(q^{r}-1)/(q-1);\mathbb {F} _{q})} 을 구성할 수 있다. 이 행렬을 패리티 확인 행렬 로 갖는 선형 부호
C = ker H ⊆ F q ( q r − 1 ) / ( q − 1 ) {\displaystyle C=\ker H\subseteq \mathbb {F} _{q}^{(q^{r}-1)/(q-1)}} 를 q {\displaystyle q} 진 r {\displaystyle r} -해밍 부호 라고 한다.
다른 모든 선형 부호 와 마찬가지로,해밍 부호에 모든 성분에 대응되는 (즉 일반적인) 패리티 성분을 하나 더 추가할 수 있으며, 이는 [ 2 r , 2 r − r − 1 , 4 ] {\displaystyle [2^{r},2^{r}-r-1,4]} -선형 부호이다. 이를 확장 해밍 부호 (擴張Hamming符號, 영어 : extended Hamming code )라고 한다.
해밍 부호의 거리는 3이다. 즉, 일반적으로, 소수 거듭제곱 q {\displaystyle q} 및 양의 정수 r {\displaystyle r} 가 주어졌을 때, q {\displaystyle q} 진 r {\displaystyle r} -해밍 부호는 [ ( q r − 1 ) / ( q − 1 ) , ( q r − 1 ) / ( q − 1 ) − r , 3 ] q {\displaystyle [(q^{r}-1)/(q-1),(q^{r}-1)/(q-1)-r,3]_{q}} -선형 부호 이다. 특히, 거리가 3이므로, 해밍 부호는 각 부호어마다
1개 이하의 오류를 교정할 수 있으며, 2개 이하의 오류의 존재를 발견할 수 있다. (다만, 2개의 오류가 발생한 것을 1개의 오류가 발생한 것과 구별할 수 있지는 않다. 즉, 2개의 오류가 발생하였을 때, 데이터가 잘못 복구될 수 있다.) 소수 거듭제곱 q {\displaystyle q} 에 대하여, q {\displaystyle q} 진 해밍 부호를 구성하려면 동치류 의 대표원을 임의로 골라야 한다. 각 동치류의 크기 는 q − 1 {\displaystyle q-1} 이므로, (행의 순열 을 무시하면) q {\displaystyle q} 진 r {\displaystyle r} -해밍 부호의 가능한 패리티 확인 행렬 의 수는
( q − 1 ) ( q r − 1 ) / ( q − 1 ) {\displaystyle (q-1)^{(q^{r}-1)/(q-1)}} 이다. 물론, 서로 다른 패리티 확인 행렬 이 같은 선형 부호 를 정의할 수 있다.
q = 2 {\displaystyle q=2} 일 경우, 각 동치류 가 한원소 집합 이므로 해밍 부호는 유일하며, 대표원을 임의로 고를 필요가 없다. 그러나 예를 들어 q = 3 {\displaystyle q=3} 일 경우, 2 ( 3 r − 1 ) / 2 {\displaystyle 2^{(3^{r}-1)/2}} 개의 서로 다른 3진 r {\displaystyle r} -해밍 부호가 존재한다.
[ 2 r − 1 , 2 r − 1 − r , 3 ] 2 {\displaystyle [2^{r}-1,2^{r}-1-r,3]_{2}} -해밍 부호는 같은 길이 및 거리의 선형 부호 가운데, 가장 효율적이다. 즉, 임의의 [ 2 r − 1 , k , 3 ] 2 {\displaystyle [2^{r}-1,k,3]_{2}} -선형 부호 에 대하여,
k ≤ 2 r − 1 − r {\displaystyle k\leq 2^{r}-1-r} 이다.
r = 2 {\displaystyle r=2} 이진 해밍 부호는 삼중 반복 부호 (三重反復符號, 영어 : triple repetition code )와 같다. 즉, 이는 다음과 같다.
송신할 때, 같은 비트를 세 번 반복하여 보낸다. 수신할 때,만약 세 비트가 모두 같다면, 오류가 없음을 알 수 있다. 만약 세 비트 가운데 하나가 다르다면, 이를 다른 두 비트와 같게 교정할 수 있다. 생성 행렬과 표준형 패리티 확인 행렬 은 다음과 같다.
G = ( 1 1 1 ) {\displaystyle G={\begin{pmatrix}1\\1\\1\end{pmatrix}}} H = ( 1 1 0 1 0 1 ) {\displaystyle H={\begin{pmatrix}1&1&0\\1&0&1\end{pmatrix}}} 가장 흔히 사용되는 해밍 부호는 r = 3 {\displaystyle r=3} 이진 해밍 부호이다. 이 경우, r = 3 {\displaystyle r=3} 이진 해밍 부호의 생성 행렬과 표준형 패리티 확인 행렬 은 각각 다음과 같다.
G = ( 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 1 1 1 1 0 1 1 1 1 0 1 ) {\displaystyle G={\begin{pmatrix}1&0&0&0\\0&1&0&0\\0&0&1&0\\0&0&0&1\\0&1&1&1\\1&0&1&1\\1&1&0&1\\\end{pmatrix}}} H = ( 0 1 1 1 1 0 0 1 0 1 1 0 1 0 1 1 0 1 0 0 1 ) {\displaystyle H={\begin{pmatrix}0&1&1&1&1&0&0\\1&0&1&1&0&1&0\\1&1&0&1&0&0&1\\\end{pmatrix}}} F 3 {\displaystyle \mathbb {F} _{3}} 위의 사영 직선 P F 3 1 {\displaystyle \mathbb {P} _{\mathbb {F} _{3}}^{1}} 을 구성하는 F 3 2 ∖ { 0 → } {\displaystyle \mathbb {F} _{3}^{2}\setminus \{{\vec {0}}\}} 의 동치류들은 다음과 같다.
{ ( 0 , 1 ) , ( 0 , 2 ) } {\displaystyle \{(0,1),(0,2)\}} { ( 1 , 0 ) , ( 2 , 0 ) } {\displaystyle \{(1,0),(2,0)\}} { ( 1 , 1 ) , ( 2 , 2 ) } {\displaystyle \{(1,1),(2,2)\}} { ( 1 , 2 ) , ( 2 , 1 ) } {\displaystyle \{(1,2),(2,1)\}} 이에 따라, 예를 들어 첫째 대표원들을 고르면, 삼진 2-해밍 부호의 표준형 패리티 확인 행렬 은 다음과 같다.
H = ( 1 1 1 0 1 2 0 1 ) {\displaystyle H={\begin{pmatrix}1&1&1&0\\1&2&0&1\end{pmatrix}}} 그 표준형 생성 행렬은 다음과 같다.
G = ( 1 0 0 1 2 2 2 1 ) {\displaystyle G={\begin{pmatrix}1&0\\0&1\\2&2\\2&1\end{pmatrix}}} 리처드 해밍 이 1950년에 도입하였다.[2] 1940년대 벨 연구소 에서 벨 모델 V(영어 : Bell Model V )라는 컴퓨터 를 이용해서 작업을 했다. 이 컴퓨터는 확실히 여러 면에서 오늘날의 컴퓨터와는 거리가 멀었다. 릴레이 회로로 만들어졌으며 입력도 천공 카드 를 이용했다. 천공 카드를 이용했으므로 컴퓨터에 입력되는 자료들은 필연적으로 언제나 오류의 가능성이 있었다. 주중에는 컴퓨터의 관리자가 있으면서 입력에 오류가 발생했다는 경고등이 켜지면 직접 수정할 수 있었으나, 관리자가 없는 주말에는 에러가 발생한 채 프로그램이 실행되지 않고 다음 작업으로 넘어가기 일쑤였다. 해밍은 이런 문제로 인해 여러 차례 고생을 한 후에, 이 문제를 근본적으로 해결하기 위해 노력했다. 그 후 몇 년 동안 오류를 수정하는 방법에 대해서 연구하면서 이와 관련된 여러가지의 효율적인 알고리즘을 만들어냈고 마침내 1950년에 해밍 부호를 발표했다. 이는 선형 부호 이론의 시초로 여겨진다.
해밍 부호, 특히 r = 3 {\displaystyle r=3} 이진 해밍 부호는 오늘날에도 널리 사용되고 있다.