¿Por qué es este código únicamente decodificable?

21

Alfabeto fuente: {a,b,c,d,e,f}

Alfabeto de código: {0,1}

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

Pensé que para que un código fuera exclusivamente decodificable, tenía que estar libre de prefijos. Pero en este código, la palabra de código c es el prefijo de la palabra de código f por ejemplo, por lo que no está libre de prefijo. Sin embargo, mi libro de texto me dice que su reverso está libre de prefijos (no entiendo esto) y, por lo tanto, es decodificable de manera única. ¿Alguien puede explicar qué significa esto o por qué es decodificable de manera única? Sé que satisface la desigualdad de Kraft, pero esa es solo una condición necesaria, no una condición suficiente.

2000mroliver
fuente
10
Sin prefijo implica únicamente decodificable, pero que no es una declaración "si y solo si". Ver, por ejemplo, aquí .
dkaeae
Está bien, ya veo, pero mi libro de texto dice esto: el Código A es decodificable de manera única ya que su reverso es libre de prefijos, tan decodificable de manera única ¿Entiende lo que significan al reverso?
2000mroliver
1
Probablemente simplemente el código obtenido al invertir todas las palabras de código.
dkaeae
y por qué eso implica una decodificación única, no lo entiendo
2000mroliver
1
cpuede ser un prefijo de by f, pero los sufijos que quedan no existen en el código. Cuando invierte el código, los sufijos se convierten en prefijos y luego se vuelven libres de prefijos.
Barmar

Respuestas:

26

Su código tiene la propiedad de que si invierte todas las palabras de código, obtendrá un código de prefijo. Esto implica que su código es únicamente decodificable.

De hecho, considere cualquier código C=x1,,xn cuyo reverso CR:=x1R,,xnR es únicamente decodificable. Afirmo que C también es decodificable de forma única. Esto se debe a que

w=xi1xim if and only if wR=ximRxi1R.
En palabras, descomposiciones de w en palabras de código de C están en correspondencia uno-a-uno con descomposiciones de wR en palabras de código de CR . Como los últimos son únicos, también lo son los primeros.

Dado que los códigos de prefijo son decodificables de manera única, se deduce que el reverso de un código de prefijo también es decodificable de manera única. Este es el caso en su ejemplo.

C

i=1n2|xi|1.

0,01,110.
111001001010

prefix00010011001110codeword001001
1

Yuval Filmus
fuente
2
Parece que en el ejemplo del OP, no podemos decodificar la primera palabra de código después de una cantidad fija de dígitos, hay infinitos casos: 1001010101010101…puede ser uno fcccccc…o caaa…, y podríamos tener que esperar hasta el final de la entrada para decidir.
Bergi
1
1,10,00
44
@ Bergi Siempre es decodificable para cualquier cantidad finita de dígitos. Siempre hay una sola forma de decodificar la codificación sin restos. Cualquier otro intento terminará con 1 o 0 de repuesto. Esto se debe a que el código es decodificable de manera única si lo leemos primero. En teoría, si algo es exclusivamente decodificable en una dirección, no tiene sentido que pueda haber más de una solución en la otra dirección
slebetman
@slebetman Me refería a un prefijo finito (con posibles restos). Sí, si tomamos toda la entrada, siempre es decodificable.
Bergi
5

Si le doy algún mensaje que se supone que debe decodificar, puede hacer lo siguiente: Invierta el mensaje, comenzando con el último bit en lugar del primer bit. Invierta las palabras de código. Decodifica el mensaje. Invierta la cadena decodificada.

Puede hacerlo porque después de invertir las seis palabras de código, obtiene un código sin prefijo: 1010, 1001, 01, 000, 11, 001 es libre de prefijo.

gnasher729
fuente
0

Si prefix-free significa lo que pienso, el reverso de 'a' comienza con 1, 10 o 101, ninguno de los cuales es otro código válido completo.

Por lo tanto, si un mensaje termina con 0101, solo puede ser una 'a' y puede aplicar una lógica similar a los bits anteriores.

Sin embargo, ¿qué pasa si no hay un final para comenzar? Bueno, si el primer bit es 1, sabes que no es 'a' o 'd'. El segundo bit eliminará 'e' o {'b', 'c', 'f'}. El tercer bit podría reducirlo a una opción, pero si no, es único en el cuarto bit.

Tan pronto como llegue a una secuencia única, reinicia el algoritmo en el siguiente bit.

WGroleau
fuente