상태 A,B,C를 전송하는 가상 장치가 있어요. A는0, B는01, C는10으로 보내요. 세 신호는 모두 다르니 수신 장치는 언제나 원래 메시지를 알아낼 수 있을까요? 상태 사이에 구분 기호나 쉼을 넣지 않고 이어 보낸다는 조건이 핵심이에요.
한 상태씩 받는다면 표를 보고 구별할 수 있어요. 하지만 두 상태를 붙이면 문제가 생겨요. BA의 신호는01 뒤에0을 붙인010입니다. AC의 신호 역시0 뒤에10을 붙인010입니다.
두 상태를 보냈다는 개수를 미리 알려 주어도 해결되지 않아요. BA와 AC 모두 두 상태이기 때문이에요. 신호표가 개별 상태를 일대일로 바꾼다는 조건은, 구분 없는 여러 상태의 연결까지 일대일이라는 조건보다 약해요.
수정안으로 A=00, B=01, C=10처럼 모두 두 비트로 정하겠습니다. 처음부터 두 비트씩 끊어 읽으면 각 조각은 한 상태에 대응해요. BA는0100, AC는0010이어서 더는 같지 않아요. 두 비트로 만들 수 있는 조각은2²=4개이므로 세 상태를 넣을 공간도 충분해요. 첫 조각의 시작 위치를 알고, 비트가 빠지거나 추가되지 않는다는 조건은 필요해요.
짧은 신호를 많이 쓰는 표라도 연결 규칙이 없다면 정보를 잃을 수 있어요. 전송 전에 개별 부호의 중복뿐 아니라 서로 다른 메시지가 같은 신호열이 되는지도 확인해야 해요. 이 수정안은 가장 짧다는 최적화 결과가 아니라, 유일하게 끊어 읽을 수 있는 한 방법이에요.
참고한 수학 개념: Mathigon · Codes and Ciphers: Introduction.
이 글의 생활 상황과 계산 예시는 수학 이야기에서 새로 구성했습니다.
