해밍 거리(Hamming distance)
길이가 같은 두 문자열에서 서로 다른 자리의 개수. 부호어끼리 해밍 거리를 벌려 두면 잡음에 뒤집힌 비트를 찾아 고칠 수 있다.
길이가 같은 두 문자열을 자리마다 비교해 다른 곳을 셉니다. 1011101과 1001001은 셋째와 다섯째 자리가 달라 해밍 거리가 2입니다. 0과 1로 된 비트열이라면, 두 수를 이진수로 적어 자리마다 비교하는 셈입니다. 비트열을 '1이 있는 자리들의 집합(set)'으로 보면, 해밍 거리는 둘 중 한쪽에만 있는 원소(element)들의 모임(대칭차, symmetric difference)의 크기입니다(집합 연산). 0/1 벡터(vector) 사이의 맨해튼 거리(Manhattan distance)와도 같습니다. 컴퓨터는 두 비트열을 XOR(자리마다 두 비트가 다르면 1, 같으면 0)한 뒤 1의 개수를 세어 구합니다(불 대수, Boolean algebra). 대칭차의 크기를 합집합(union)의 크기로 나누면 1에서 자카드 지수(Jaccard index)를 뺀 값이 됩니다. 물론 세 규칙을 지키는 거리 함수(metric)입니다.
3비트 문자열 여덟 개를 정육면체의 꼭짓점(vertex)에 놓으면, 한 비트만 다른 문자열끼리 모서리로 이어집니다. 해밍 거리는 모서리를 따라가는 최단 경로(shortest path)의 길이입니다. 이 정육면체는 그래프이고, n비트라면 n차원 정육면체(초입방체, hypercube)가 됩니다. 한 점에서 거리가 k인 문자열은 n자리 가운데 뒤집을 k자리를 고르는 방법의 수, 곧 이항계수(binomial coefficient)
잡음이 있는 통신선에서는 비트가 가끔 뒤집힙니다. 0은 000으로, 1은 111로 세 번 되풀이해 보내기로 약속합시다. 약속한 문자열을 부호어라 합니다. 두 부호어(codeword) 사이의 해밍 거리가 3이라, 비트 하나가 뒤집혀도 받은 문자열(예: 010)은 여전히 원래 부호어(000)에 더 가깝습니다. 가장 가까운 부호어로 읽으면 오류가 고쳐집니다. 색은 해밍 거리로 나눈 보로노이 영역(Voronoi region)입니다. 일반적으로 부호어 사이의 최소 거리가 d이면 d − 1개까지의 오류는 알아챌 수 있고(부호어가 다른 부호어로 바뀌지 않으니),
벨 연구소의 해밍은 7비트로 4비트를 보내면서도 오류 하나를 고치는 오류 정정 부호(error-correcting code)를 만들어 1950년에 발표했습니다. 데이터 비트 d₁…d₄에 검사 비트(check bit) p₁, p₂, p₃를 더하는데, 그림의 세 원 안에서 1의 개수가 각각 짝수가 되도록 정합니다. 짝수인지는 2로 나눈 나머지(remainder)로 봅니다. 보낼 데이터를
비밀은 자리 번호에 있습니다. 검사 1은 번호의 이진수 첫째 자리가 1인 위치(1, 3, 5, 7)를, 검사 2는 둘째 자리가 1인 위치(2, 3, 6, 7)를, 검사 3은 셋째 자리가 1인 위치(4, 5, 6, 7)를 봅니다. 그래서 k번 비트가 뒤집히면 k의 이진수에서 1인 자리의 검사들만 홀수가 되고, 신드롬이 곧 k입니다. 부호어 16개 각각을 중심으로 거리 1 안의 문자열(자기 자신과 이웃 7개)을 모으면
이어지는 곳.
- 오늘날 서버에 쓰는 ECC 메모리(오류 정정 메모리)는 흔히 해밍 부호(Hamming code)에 전체 짝수 검사 비트 하나를 더한 확장 해밍 부호나 그 변형을 씁니다. 검사 비트 하나를 더하면 부호어 사이의 최소 거리가 3에서 4로 늘어납니다. 비트 하나가 뒤집히면 고치고, 둘이 뒤집히면 적어도 알아챕니다.
- QR 코드와 CD는 더 강한 리드–솔로몬 부호(Reed–Solomon code)를 씁니다. 1960년 어빙 리드와 구스타브 솔로몬이 만든 부호로, 비트 하나하나 대신 여러 비트의 덩어리(보통 8비트) 단위로 다룹니다. 덩어리 안에서 비트가 몇 개 망가지든 오류 하나로 세므로 연달아 망가진 부분에 강하고, CD는 여기에 자료의 순서를 흩어 기록하는 방법까지 더해 긁힌 자국을 견딥니다.
- RSA 같은 암호가 엿듣는 사람을 막는다면, 오류 정정 부호는 잡음을 막습니다. 둘 다 보내는 내용을 약속된 방식으로 바꾸어 보내지만 막는 상대가 다릅니다.
- 오류 정정 부호가 일부러 여분을 더한다면, 거꾸로 여분을 덜어 내 길이를 줄이는 쪽은 허프만 부호(Huffman coding) 같은 압축입니다.
- 길이가 다른 문자열까지 비교하려면 글자를 넣고 빼는 것도 허용하는 편집 거리(edit distance)로 넘어갑니다.
- 받은 문자열을 가장 가까운 부호어로 읽는 것은 최근접 이웃(nearest neighbor) 찾기와 같습니다.
- 부호어를 얼마나 촘촘히 둘 수 있는지, 곧 잡음이 있는 통로로 오류 확률을 원하는 만큼 작게 하면서 한 번에 얼마나 많은 정보를 보낼 수 있는지의 한계는 통로 부호화 정리(noisy-channel coding theorem)가 답합니다.
이 개념이 나오는 긴 글
이 개념 위에 세워진 것
이 개념을 언급하는 페이지
- 그래프
… 두 비트열 사이의 최단 거리는 한 자리씩 고쳐 가야 하는 횟수, 곧 서로 다른 자리의 개수이고, 이것이해밍 거리입니다. 칸들이 한 줄로 늘어선 것도 그래프(칸마다 양옆 칸과 이어진 경로)입니다. 칸마다 흑이나 백의 …
- 최근접 이웃 분류
… 거리⟧를 씁니다. 문서라면 코사인 유사도, 철자라면 편집 거리, 0과 1의 문자열이라면해밍 거리로 이웃을 찾습니다. 방법은 그대로 두고 거리만 갈아 끼우면 됩니다. 확률로 보면 k개 이웃 가운데 노랑의 …
- 자카드 지수
… 분자 |A\triangle B| (한쪽에만 있는 것의 개수)는 두 집합을 0과 1의 줄로 적었을 때의해밍 거리이고, 자카드 거리는 그것을 합집합의 크기로 나눈 것입니다. 삼각부등식은 아래의 무작위 순서 요령으로 한 …
- 쇠렌센–다이스 계수
… a||\vec b| 으로 바꾸면 코사인 유사도가 됩니다. 한쪽에만 있는 것의 개수 FP + FN은해밍 거리입니다. 철자가 비슷한 단어를 찾을 때는 두 글자씩 자른 조각의 다이스 계수를 편집 거리 대신 쓰기도 …
- 거리 함수
… 지키면 무엇이든 거리입니다. 같으면 0, 다르면 1을 주는 '이산 거리'도 거리 함수입니다. 비트열의해밍 거리, 단어의 편집 거리, 모든 점이 이어지고 모든 선이 양방향이며 선의 길이가 양수인 그래프에서 …
- 맨해튼 거리
… 성분마다의 차이 |\Delta| 가 같으면 0, 다르면 1이니, 맨해튼 거리는 서로 다른 자리의 개수, 곧해밍 거리입니다. 가로와 세로로 동시에 한 칸씩 움직일 수 있으면 체비쇼프 거리가 됩니다. 평면에서는 둘이 …
- 보로노이 다이어그램
… 정하는 지도입니다. 지구 전체라면 대원을 따른 측지선 거리로 구면을 나눕니다(구면기하). 비트열을해밍 거리로 나눈 영역은 오류 정정 부호의 해독 규칙입니다. 받은 비트열을 가장 가까운 부호어로 읽기 …
- 편집 거리
해밍 거리는 길이가 같은 문자열을 같은 자리끼리만 비교합니다. 그래서 '미적분'과 '적분학'은 글자 하나가 밀렸을 …
- 불 대수
… 하나가 뒤집혔을 때(더 일반적으로는 홀수 개가 뒤집혔을 때) 알아챌 수 있는데, 이것이 패리티 검사이고,해밍 부호는 이런 검사 여러 개를 겹쳐 뒤집힌 자리까지 찾아냅니다. NAND(AND의 부정) 하나만 있어도 NOT, …
- 정보 엔트로피
… 통로 용량이고, 그 한계에 다가가는 부호는 부호어(부호로 쓰는 비트열)끼리 서로 다른 자리의 개수, 곧해밍 거리가 크도록 설계합니다. 언어 모형의 성능은 실제 글에 대한 교차 엔트로피, 곧 모형이 매긴 …
- 오류 정정 부호
… 부호의 성능은 두 수로 잽니다. 보낸 비트 가운데 진짜 정보의 비율인 전송률 R과, 부호어끼리 가장 가까운해밍 거리d입니다. d가 3이면 오류 하나를 고치고, 일반적으로 \lfloor (d-1)/2 \rfloor 개까지 …
- 통로 용량
… 비트/초입니다. 용량을 실제로 끌어내는 방법이 오류 정정 부호이고, 부호어끼리 서로 다른 비트의 개수인해밍 거리가 설계의 잣대입니다. 상호 정보량을 입력에 대해 최대화하면 용량이 되고, 허용 왜곡 아래에서 …
- 통로 부호화 정리
… k비트에 무작위로 뽑은 행렬을 곱해 n비트 부호어를 만들고(k는 nR을 반올림한 값), 받은 비트열은해밍 거리로 가장 가까운 부호어로 읽습니다. 메시지가 모두 같은 확률로 나온다면 이것이 이 통로에서 가장 좋은 …
- 라틴 방진
… 보였습니다. 직교하는 두 라틴 방진의 칸마다 (행, 열, 첫째 기호, 둘째 기호)를 적으면, 어느 두 줄도해밍 거리가 3 이상인 부호어 n²개가 되어 오류 하나를 고칠 수 있는 오류 정정 부호가 됩니다. 그래프로 보면 …
- 배타적 논리합
… 대수⟧에, 2로 나눈 나머지의 덧셈은 모듈러 연산에 있습니다. 두 비트열을 XOR해 1의 개수를 세면해밍 거리가 되고, 검사 비트로 오류를 고치는 방법은 오류 정정 부호가 이어 갑니다. 돌무더기의 크기를 …