컴퓨터 과학 과 조합론 에서 선형 부호 (線型 せんけい 符號 ふごう , 영어 : linear code 리니어 코드[* ] )는 알파벳이 유한체 이며, 부호화 함수가 유한체 위의 선형 변환 인 블록 부호 이다. 그 속의 벡터들 사이의 해밍 거리 가 큰 선형 부호를 사용하면, 노이즈가 있는 채널을 통해 전송된 데이터의 일부 오류를 교정할 수 있다.
두 자연수
n
,
k
∈
N
{\displaystyle n,k\in \mathbb {N} }
및 소수 의 (양의 정수 지수) 거듭제곱
q
∈
{
2
,
3
,
4
,
5
,
7
,
8
,
9
,
11
,
…
}
{\displaystyle q\in \{2,3,4,5,7,8,9,11,\dotsc \}}
가 주어졌다고 하자.
길이
n
{\displaystyle n}
의
k
{\displaystyle k}
차원
q
{\displaystyle q}
진 선형 부호 (-
k
{\displaystyle k}
次元 じげん
q
{\displaystyle q}
進 すすむ 線型 せんけい 符號 ふごう , 영어 :
k
{\displaystyle k}
-dimensional
q
{\displaystyle q}
-ary linear code with length
n
{\displaystyle n}
)는 유한체
F
q
{\displaystyle \mathbb {F} _{q}}
위의
n
{\displaystyle n}
차원 벡터 공간
F
q
n
{\displaystyle \mathbb {F} _{q}^{n}}
속의
k
{\displaystyle k}
차원
F
q
{\displaystyle \mathbb {F} _{q}}
-부분 벡터 공간
C
⊆
F
q
n
{\displaystyle C\subseteq \mathbb {F} _{q}^{n}}
이다. 이는 블록 부호
C
:
F
q
k
→
F
q
n
{\displaystyle C\colon \mathbb {F} _{q}^{k}\to \mathbb {F} _{q}^{n}}
으로 생각할 수 있다.
선형 부호
C
{\displaystyle C}
의 원소는 부호어 (符號 ふごう 語 ご , 영어 : codeword )라고 한다.
C
{\displaystyle C}
위에 해밍 거리 를 부여하면, 이는 거리 공간 을 이룬다. 해밍 거리를
d
H
(
−
,
−
)
{\displaystyle \operatorname {d_{H}} (-,-)}
로 표기하자.
선형 부호
C
{\displaystyle C}
의 최소 거리 (最小 さいしょう 距離 きょり , 영어 : minimum distance )
d
{\displaystyle d}
는 그 부호어 가운데 0이 아닌 것의 최소 해밍 무게 이다. 이는
C
{\displaystyle C}
의 서로 다른 두 원소 사이의 거리의 최솟값과 같다.
구문 분석 실패 (SVG를 사용하되 미지원 시 PNG 사용 (브라우저 플러그인을 통해 MathML 활성화 가능): "http://localhost:6011/ko.wikipedia.org/v1/" 서버에서 잘못된 응답 ('Math extension cannot connect to Restbase.'):): {\displaystyle d=\min_{c\in C}\operatorname{d_H}(c,0)=\min_{c,c'\in C,\;c\ne c'}\operatorname{d_H}(c,c')}
흔히, 최소 거리
d
{\displaystyle d}
의, 길이
n
{\displaystyle n}
의.
k
{\displaystyle k}
차원
q
{\displaystyle q}
진 선형 부호를
[
n
,
k
,
d
]
q
{\displaystyle [n,k,d]_{q}}
-선형 부호 라고 표기한다. (
q
=
2
{\displaystyle q=2}
인 경우
q
{\displaystyle q}
가 흔히 생략된다.)
[
n
,
k
,
d
]
q
{\displaystyle [n,k,d]_{q}}
-선형 부호
C
⊆
F
q
n
{\displaystyle C\subseteq \mathbb {F} _{q}^{n}}
의 생성 행렬 (生成 せいせい 行列 ぎょうれつ , 영어 : generator matrix )은
C
{\displaystyle C}
를 선형 생성하는
k
{\displaystyle k}
개의 열벡터들로 구성된
n
×
k
{\displaystyle n\times k}
행렬이며, 흔히
G
{\displaystyle G}
로 표기된다.
[
n
,
k
,
d
]
q
{\displaystyle [n,k,d]_{q}}
-선형 부호
C
⊆
F
q
n
{\displaystyle C\subseteq \mathbb {F} _{q}^{n}}
의 패리티 확인 행렬 (영어 : parity check matrix )은
C
=
ker
H
{\displaystyle C=\ker H}
가 되는
n
−
k
×
n
{\displaystyle n-k\times n}
행렬이다. 다시 말해,
H
{\displaystyle H}
의 열벡터들은
C
⊥
{\displaystyle C^{\perp }}
를 선형 생성한다. 이는 흔히
H
{\displaystyle H}
로 표기된다.
만약
H
{\displaystyle H}
가
H
=
(
B
n
−
k
×
k
|
1
n
−
k
×
n
−
k
)
{\displaystyle H=(B_{n-k\times k}|1_{n-k\times n-k})}
의 꼴이라면,
H
{\displaystyle H}
를 표준형 패리티 확인 행렬 (標準 ひょうじゅん 型 がた parity確認 かくにん 行列 ぎょうれつ , 영어 : standard-form parity check matrix )이라고 한다. 임의의 선형 부호에 대하여, 표준형 패리티 확인 행렬이 존재한다.
선형 부호
C
⊆
F
q
n
{\displaystyle C\subseteq \mathbb {F} _{q}^{n}}
의 직교 여공간
C
⊥
=
{
v
∈
F
q
n
:
⟨
u
,
v
⟩
=
0
∀
u
∈
C
}
{\displaystyle C^{\perp }=\{v\in \mathbb {F} _{q}^{n}\colon \langle u,v\rangle =0\qquad \forall u\in C\}}
을
C
{\displaystyle C}
의 쌍대 선형 부호 (雙對 そうつい 線型 せんけい 符號 ふごう , 영어 : dual linear code )라고 한다. 만약
C
{\displaystyle C}
가
[
n
,
k
,
d
]
q
{\displaystyle [n,k,d]_{q}}
-선형 부호라면,
C
⊥
{\displaystyle C^{\perp }}
은
[
n
,
n
−
k
,
d
′
]
q
{\displaystyle [n,n-k,d']_{q}}
-선형 부호이다. 일반적으로
d
′
{\displaystyle d'}
은
(
n
,
k
,
d
,
q
)
{\displaystyle (n,k,d,q)}
로부터 결정되지 않는다.
예:
Span
F
2
{
(
1
,
0
,
0
)
,
(
0
,
1
,
0
)
}
{\displaystyle \operatorname {Span} _{\mathbb {F} _{2}}\{(1,0,0),(0,1,0)\}}
Span
F
2
{
(
1
,
0
,
0
)
,
(
0
,
1
,
1
)
}
{\displaystyle \operatorname {Span} _{\mathbb {F} _{2}}\{(1,0,0),(0,1,1)\}}
은 둘 다 [3,2,1]2 -선형 부호이지만, 그 쌍대 선형 부호
(
Span
F
2
{
(
1
,
0
,
0
)
,
(
0
,
1
,
0
)
}
)
⊥
=
Span
F
2
{
(
0
,
0
,
1
)
}
{\displaystyle (\operatorname {Span} _{\mathbb {F} _{2}}\{(1,0,0),(0,1,0)\})^{\perp }=\operatorname {Span} _{\mathbb {F} _{2}}\{(0,0,1)\}}
(
Span
F
2
{
(
1
,
0
,
0
)
,
(
0
,
1
,
1
)
}
)
⊥
=
Span
F
2
{
(
0
,
1
,
1
)
}
{\displaystyle (\operatorname {Span} _{\mathbb {F} _{2}}\{(1,0,0),(0,1,1)\})^{\perp }=\operatorname {Span} _{\mathbb {F} _{2}}\{(0,1,1)\}}
는 각각 [3,1,1]2 -선형 부호 및 [3,1,2]2 -선형 부호이다.
임의의 소수 거듭제곱
q
{\displaystyle q}
및 두 양의 정수
1
≤
k
≤
n
{\displaystyle 1\leq k\leq n}
에 대하여, 자명한 선형 부호
C
=
{
(
a
1
,
a
2
,
…
,
a
k
,
0
,
0
,
…
,
0
)
}
⊆
F
q
n
{\displaystyle C=\{(a_{1},a_{2},\dotsc ,a_{k},0,0,\dotsc ,0)\}\subseteq \mathbb {F} _{q}^{n}}
를 정의할 수 있다. 이는
[
n
,
k
,
1
]
q
{\displaystyle [n,k,1]_{q}}
-선형 부호이다. 즉, 이 자명한 선형 부호는 각 부호어마다
0개의 오류를 교정할 수 있으며,
0개의 오류를 발견할 수 있다.
다시 말해, 이 자명한 부호는 실제 데이터의 송신에는 쓸모가 없다.
임의의 2 이상의 정수
r
{\displaystyle r}
에 대하여,
r
{\displaystyle r}
-이진 해밍 부호 는
[
2
r
−
1
,
2
r
−
r
−
1
,
3
]
2
{\displaystyle [2^{r}-1,2^{r}-r-1,3]_{2}}
-선형 부호이다. 예를 들어,
r
=
2
{\displaystyle r=2}
일 때 2-이진 해밍 부호 는 [3,1,3]2 -선형 부호이며, 3-이진 해밍 부호 는 [7,4,3]2 -선형 부호이다.
최소 해밍 무게 가 3이므로, 이진 해밍 부호 는 각 부호어마다
1개 이하의 오류를 교정할 수 있으며,
2개 이하의 오류를 발견할 수 있다.
2-이진 해밍 부호 는 최대 거리 분리 선형 부호이지만,
r
≥
3
{\displaystyle r\geq 3}
일 경우
r
{\displaystyle r}
-이진 해밍 부호 는 최대 거리 분리 선형 부호가 아니다.
정수
r
{\displaystyle r}
에 대하여, 아다마르 부호 (영어 : Hadamard code )는
[
2
r
,
r
,
2
r
−
1
]
2
{\displaystyle [2^{r},r,2^{r-1}]_{2}}
-선형 부호이다. 예를 들어,
r
=
1
{\displaystyle r=1}
일 때 1-아다마르 부호는 [2,1,1]2 -선형 부호이며, 2-아다마르 부호는 [4,2,2]2 -선형 부호이며, 3-아다마르 부호는 [8,2,4]2 -선형 부호이다.
이진 골레 부호 는 [24,12,8]2 -선형 부호이며, 삼진 골레 부호 는 [12,6,6]3 -선형 부호이다. 이들은 마티외 군 의 군론적 성질을 사용하여 구성된다.
데이터
p
=
(
1
0
1
1
)
{\displaystyle p={\begin{pmatrix}1\\0\\1\\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}}}
그렇다면, 다음과 같은 부호를 송신하게 된다.
x
=
G
p
=
(
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
)
(
1
0
1
1
)
=
(
1
0
1
1
0
1
0
)
{\displaystyle x=Gp={\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}}{\begin{pmatrix}1\\0\\1\\1\end{pmatrix}}={\begin{pmatrix}1\\0\\1\\1\\0\\1\\0\end{pmatrix}}}
반대로, 위 데이터
x
=
(
1
0
1
1
0
1
0
)
{\displaystyle x={\begin{pmatrix}1\\0\\1\\1\\0\\1\\0\end{pmatrix}}}
를 수신하였다고 하자. 이 데이터가 오류 없이 수신되었음을 확인하려면, 패리티 확인 행렬을 사용하여 다음을 계산한다.
H
x
=
(
0
1
1
1
1
0
0
1
0
1
1
0
1
0
1
1
0
1
0
0
1
)
(
1
0
1
1
0
1
0
)
=
(
0
0
0
)
{\displaystyle Hx={\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}}{\begin{pmatrix}1\\0\\1\\1\\0\\1\\0\end{pmatrix}}={\begin{pmatrix}0\\0\\0\end{pmatrix}}}
이 값이 0이므로 오류가 발생하지 않았음을 알 수 있다.
전송 과정에서 다음과 같은 1비트 오류가 발생했다고 하자.
r
=
(
1
1
1
1
0
1
0
)
{\displaystyle r={\begin{pmatrix}1\\1\\1\\1\\0\\1\\0\end{pmatrix}}}
그렇다면, 다음과 같이 오류를 발견할 수 있다.
H
r
=
(
0
0
0
1
1
1
1
0
1
1
0
0
1
1
1
0
1
0
1
0
1
)
(
1
1
1
1
0
1
0
)
=
(
0
1
0
)
{\displaystyle Hr={\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}}{\begin{pmatrix}1\\1\\1\\1\\0\\1\\0\end{pmatrix}}={\begin{pmatrix}0\\1\\0\end{pmatrix}}}
이에 따라, 둘째 비트에서 오류가 발생하였음을 알 수 있다.
선형 부호 이론은 1950년에 해밍 부호 의 발견으로부터 시작된다. 해밍은 1940년대 벨 연구소 에서 벨 모델 V(영어 : Bell Model V )라는 컴퓨터 를 이용해서 작업을 했다. 이 컴퓨터는 확실히 여러 면에서 오늘날의 컴퓨터와는 거리가 멀었다. 릴레이 회로로 만들어졌으며 입력도 천공 카드 를 이용했다. 천공 카드를 이용했으므로 컴퓨터에 입력되는 자료들은 필연적으로 언제나 오류의 가능성이 있었다. 주중에는 컴퓨터의 관리자가 있으면서 입력에 오류가 발생했다는 경고등이 켜지면 직접 수정할 수 있었으나, 관리자가 없는 주말에는 에러가 발생한 채 프로그램이 실행되지 않고 다음 작업으로 넘어가기 일쑤였다.
해밍은 이런 문제로 인해 여러 차례 고생을 한 후에, 이 문제를 근본적으로 해결하기 위해 노력했다. 그 후 몇 년 동안 오류를 수정하는 방법에 대해서 연구하면서 이와 관련된 여러가지의 효율적인 알고리즘을 만들어냈고 마침내 1950년에 해밍 부호 를 발표했다.[ 1]
이진 골레 부호 는 마르셀 골레(프랑스어 : Marcel Jules Édouard Golay )가 도입하였다. 아다마르 부호는 자크 아다마르 의 이름을 땄으며, 그 구성에 아다마르 행렬 이 등장하므로 이러한 이름이 붙었다.