이 코드가 왜 고유하게 해독 가능한가?


21

소스 알파벳 :{a,b,c,d,e,f}

코드 알파벳 :{0,1}

  • a:0101
  • b:1001
  • c:10
  • d:000
  • e:11
  • f:100

코드를 고유하게 디코딩 할 수 있으려면 접두사가 없어야한다고 생각했습니다. 그러나이 코드에서 코드 워드 는 코드 워드 의 접두사 이므로 접두사가없는 것은 아닙니다. 그러나 내 교과서는 그 반대가 접두사가 없다고 알려줍니다 (이해하지 못합니다). 따라서 고유하게 해독 할 수 있습니다. 누군가 이것이 이것이 무엇을 의미하는지 또는 왜 독특하게 해독 가능한지를 설명 할 수 있습니까? 나는 그것이 크래프트의 불평등을 충족 시킨다는 것을 알고 있지만, 그것은 충분한 조건이 아니라 필요한 조건 일뿐입니다.cf


10
접두어가없는 것은 고유하게 디코딩 할 수 있음을 의미하지만 "if and only if"문이 아닙니다. 예를 들어 here 참조 하십시오 .
dkaeae

알았지 만 교과서에 따르면 코드 A는 접두사가 없기 때문에 고유하게 해독 할 수 있습니다. 따라서 고유하게 해독 할 수 있습니다.
2000mroliver

1
아마도 모든 코드 워드를 반대로하여 얻은 코드 일 것입니다.
dkaeae

왜 그렇게 독특하게 해독 할 수
있는가

1
cb및 접두사 f일 수 있지만 남은 접미사는 코드에 존재하지 않습니다. 코드를 되 돌리면 접미사가 접두사가되고 접두사가없는 상태가됩니다.
Barmar

답변:


26

코드에는 모든 코드 워드를 뒤집 으면 접두사 코드가 표시되는 속성이 있습니다. 이는 코드가 고유하게 디코딩 가능하다는 것을 의미합니다.

실제로, 역 C R : = x R 1 , , x R n 이 고유하게 디코딩 가능한 코드 C=x1,,xn 고려하십시오 . 나는 C 도 독특하게 해독 할 수 있다고 주장한다 . 이는 w R = x R i mx R i 1 인  경우에만  w = x i 1x i m 이기 때문 입니다.CR:=x1R,,xnRC

w=xi1xim if and only if wR=ximRxi1R.
다시 말해, wC 코드 워드로의 분해는 wRCR 코드 워드로의 분해와 일대일 대응 관계에있다 . 후자는 독특하기 때문에 전자도 마찬가지입니다.

프리픽스 코드는 고유하게 디코딩 할 수 있기 때문에 프리픽스 코드의 반대도 고유하게 디코딩 할 수 있습니다. 이것은 귀하의 예입니다.

McMillan 부등식은 C 가 고유하게 해독 가능한 경우

i=1n2|xi|1.
즉, 고유하게 디코딩 가능한 코드는 Kraft의 불평등을 충족시킵니다. 따라서 관심있는 모든 것이 예상 코드 워드 길이를 최소화하는 것이라면 접두사 코드를 넘어야 할 이유가 없습니다.

Sam Roweis는 자신의 슬라이드 에서 접두사 코드 나 접두사 코드 (

0,01,110.
가 아닌 고유하게 디코딩 가능한 코드의 좋은 예를 제공 합니다. 단어의 첫 번째 코드 워드를 디코딩합니다. 단어가 1 시작 하면 첫 번째 코드 워드는 110 입니다. 형식 또는 이어야합니다 . 그렇지 않으면 형식의 접두사가 있어야합니다.01001010 . 우리는 이제 몇 가지 경우를 구별합니다.

prefix00010011001110codeword001001
1


2
OP의 예에서 고정 자릿수 뒤에 첫 번째 코드 워드를 디코딩 할 수없는 경우가 많습니다. 무한히 많은 경우 1001010101010101…가 있습니다. fcccccc…또는 또는 caaa…일 수 있으며 입력이 끝날 때까지 기다려야 결정을 내릴 수 있습니다.
베르 기

1
1,10,00

4
@Bergi 유한 한 자릿수에 대해 항상 디코딩 할 수 있습니다. 나머지없이 인코딩을 디코딩하는 방법은 항상 한 가지입니다. 다른 시도는 여분의 1 또는 0으로 끝납니다. 꼬리를 먼저 읽으면 코드를 고유하게 디코딩 할 수 있기 때문입니다. 이론적으로 무언가가 한 방향으로 독특하게 결정될 수 있다면 다른 방향으로 하나 이상의 해결책이있을 수 있다는 것은 의미가 없습니다
slebetman

@ slebetman 유한 접두사를 언급하고있었습니다 (나머지는 가능합니다). 예, 전체 입력을 취하면 항상 해독 할 수 있습니다.
Bergi

5

해독해야 할 메시지가 있으면 다음을 수행 할 수 있습니다. 첫 번째 비트 대신 마지막 비트부터 시작하여 메시지를 되돌립니다. 코드 단어를 바꾸십시오. 메시지를 해독하십시오. 디코딩 된 문자열을 반대로 바꿉니다.

6 개의 코드 단어를 뒤집은 후에는 프리픽스 프리 코드를 얻을 수 있습니다. 1010, 1001, 01, 000, 11, 001은 프리픽스가 없습니다.


0

접두사가없는 것이 내가 생각하는 것을 의미한다면, 'a'의 역은 1 또는 10 또는 101로 시작하며 그중 어느 것도 다른 유효한 코드가 아닙니다.

따라서 메시지가 0101로 끝나는 경우 'a'만 될 수 있으며 앞의 비트에 유사한 논리를 적용 할 수 있습니다.

그러나 시작부터 끝이 없다면? 첫 번째 비트가 1이면 'a'또는 'd'가 아님을 알 수 있습니다. 두 번째 비트는 'e'또는 { 'b', 'c', 'f'}를 제거합니다. 세 번째 비트는 한 번의 선택으로 내려갈 수 있지만 그렇지 않은 경우 네 번째 비트에서 고유합니다.

고유 한 시퀀스에 도달하자마자 다음 비트에서 알고리즘을 다시 시작합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.