두 자리가 지워진 기록, 어느 자리를 먼저 다시 물어야 할까요?

일곱 자리 기록에서 두 자리가 지워지고, 남은 자리 중 정확히 하나가 뒤집힌 모형이에요. 어느 자리든 정확한 원래 값을 하나씩 다시 받을 수 있을 때, 최악의 경우 요청 횟수를 최소로 하는 첫 자리를 찾아요. 가능한 원래 기록을 나누어 확인해요.

나무 책상 위 무표기 키보드와 케이블로 연결된 작은 저장장치

이미지: AI 생성 · 수학 이야기

기록의 두 자리가 지워지고, 남은 자리에서도 하나가 틀렸어요. 원래 값을 한 자리씩 다시 받을 수 있다면 어디부터 물어야 할까요? 이미 보이는 자리보다 지워진 자리를 먼저 물어야 할 수도 있어요.

0과 1로 된 일곱 자리 기록을 생각해 봐요. 보낸 기록 c₁,…,c₇은 다음 세 검사식의 나머지가 모두 0입니다. ⊕는 두 값이 같으면 0, 다르면 1인 연산이에요. 여러 값에서는 1의 개수가 홀수인지 짝수인지 나타내요.

c1⊕c3⊕c5⊕c7=0,c2⊕c3⊕c6⊕c7=0,c4⊕c5⊕c6⊕c7=0.\begin{gathered} c_1\oplus c_3\oplus c_5\oplus c_7=0,\\ c_2\oplus c_3\oplus c_6\oplus c_7=0,\\ c_4\oplus c_5\oplus c_6\oplus c_7=0. \end{gathered}

이 세 식은 알려진 7자리 이진 해밍 부호의 검사조건이에요. 원문에 있는 한 자리 오류 수정 규칙 자체를 새 질문으로 세지는 않아요.

현재는 1번과 2번이 지워져 보이지 않아요. 보이는 3~7번 중에서도 정확히 하나가 뒤집혀 0이 1, 또는 1이 0이 되었어요. 다른 손상은 없어요. 보이는 다섯 값을 r₃,…,r₇이라 해 볼까요? 원래 기록을 보관한 곳에 어느 자리든 원래 0/1값을 다시 물을 수 있어요. 새 답은 정확하고, 다음 자리는 앞 답에 따라 정해도 돼요.

모든 허용 기록에서 복원을 마칠 수 있게 하려면 최악의 경우 몇 번을 물어야 할까요? 그 횟수를 달성하는 첫 자리가 무엇인지도 전부 찾아요. 후보들이 같은 확률이라는 가정이나 평균 요청 횟수의 최적화는 하지 않아요.

먼저 보이는 값만으로 세 나머지를 계산해요.

p=r4⊕r5⊕r6⊕r7,A=r3⊕r5⊕r7,B=r3⊕r6⊕r7.\begin{gathered} p=r_4\oplus r_5\oplus r_6\oplus r_7,\\ A=r_3\oplus r_5\oplus r_7,\\ B=r_3\oplus r_6\oplus r_7. \end{gathered}

p=0이면 4~7번은 모두 맞아요. 이 네 자리 중 하나가 틀렸다면 원래 0인 세 번째 검사값이 1로 바뀌었을 거예요. 오류가 정확히 하나라는 조건 때문에 3번만 뒤집혔다고 확정해요. c₃=1−r₃로 고친 뒤 앞 두 식에서 지워진 값을 구해요.

c1=1−A,c2=1−B(p=0).c_1=1-A,\qquad c_2=1-B\qquad(p=0).

받은 다섯 자리가 00000이어도 원래 일곱 자리가 모두 0은 아니에요. 원래 기록은 1110000이고 3번이 뒤집힌 거예요. 이 경우에는 추가 요청이 전혀 필요하지 않아요.

p=1이면 상황이 달라요. 3번이 뒤집혀서는 이 검사값이 바뀌지 않으므로 오류는 4~7번 중 하나예요. 각 후보 자리의 값을 고치고 앞 두 식으로 c₁,c₂를 정하면 세 검사식 모두를 만족해요. 따라서 어느 후보도 아직 버릴 수 없어요.

뒤집힌 자리 원래 1번·2번의 값
4 (A,B)
5 (1−A,B)
6 (A,1−B)
7 (1−A,1−B)

네 후보의 지워진 두 자리는 가능한 네 조합을 정확히 한 번씩 가져요. 1번과 2번의 원래 값을 차례로 물으면 어느 자리에서 오류가 났는지 정해지고 전체 기록도 복원돼요.

이 두 요청보다 적게 끝낼 수는 없어요. 한 요청의 답은 0 또는 1뿐이에요. 제공 교재의 곱의 법칙으로 두 요청의 답 조합은 최대 2×2=4가지이며, 한 요청에는 두 답만 있어요. 원래 기록 네 후보가 모두 가능한 현재 경우에는 적어도 두 요청이 필요해요. 여기서 같은 확률이라는 가정은 쓰지 않아요.

그렇다고 아무 자리를 처음에 물어도 두 번에 끝나는 것은 아니에요. 1번이나 2번은 네 후보를 둘씩 나누고, 나머지 지워진 자리를 한 번 더 물어 구별해요. 반면 3번 값은 네 후보에서 모두 r₃로 같아 첫 요청에서 아무 후보도 없애지 못해요.

4~7번 중 하나를 처음에 물으면 그 자리가 틀린 후보 하나와 맞은 후보 세 개로 나뉘어요. 답이 세 후보 쪽이면 한 요청만 남아 있어요. 두 답으로 세 기록을 구별할 수는 없으므로 최악의 경우 두 번에 끝내지 못해요. 그 뒤 1번과 2번을 물으면 세 번에는 끝낼 수 있어요. 3번을 먼저 물은 경우도 마찬가지예요.

p=1:최소 최악 요청 수=2,이를 달성하는 첫 자리=1 또는 2.\begin{gathered} p=1:\quad\text{최소 최악 요청 수}=2,\\ \text{이를 달성하는 첫 자리}=1\text{ 또는 }2. \end{gathered}

예를 들어 받은 값이 00001이면 원래 기록은 1101001,0100101,1000011,0000000 중 하나예요. 네 후보의 1번·2번 값은 11,01,10,00으로 모두 달라요. 눈에 보이는 마지막 자리를 다시 확인하는 것이 지워진 두 자리를 묻는 것보다 항상 낫지는 않아요.

조건의 단어 하나도 중요해요. 오류가 ‘정확히 하나’가 아니라 ‘최대 하나’라면 p=0에서 오류가 전혀 없는 기록도 후보가 돼요. 받은 00000은 0000000과 1110000 두 원래 기록에서 모두 가능해요. 이 바뀐 조건에서는 지워진 1번이나 2번을 한 번 묻지 않고는 두 후보를 구별하지 못해요.

교사는 받은 자료와 새 요청의 답을 구별해 적게 해요. 후보 수를 세는 하한, 두 요청으로 복원하는 구체 규칙, 어떤 첫 요청이 그 하한을 달성하는지를 각각 확인해요. 같은 후보 수만 보고 요청 순서도 같다고 판단하지 않는 것이 질문의 중심이에요. 실제 전송 오류율이나 장치 복구 성능을 측정한 자료는 아니에요.

착안: Yuri Bazlov, Manchester Coding Theory, Decoding a Hamming code의 선택 절을 읽었어요. 알려진 이진 검사조건을 배경으로 쓰고, 두 지움·정확히 한 뒤집힘·한 자리씩의 정확한 재요청이라는 자체 조건에서 모든 관측의 후보 분류와 첫 요청 선택을 증명했어요. 원문 행렬 도판·연습문항·구현 코드는 옮기지 않았어요.

이 글 공유하기

개인정보 및 방문 통계 안내