Alfabeto fuente:
Alfabeto de código:
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 es el prefijo de la palabra de código 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.
encoding-scheme
2000mroliver
fuente
fuente
c
puede ser un prefijo deb
yf
, 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.Respuestas:
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ódigoC=x1,…,xn cuyo reverso CR:=xR1,…,xRn es únicamente decodificable. Afirmo que C también es decodificable de forma única. Esto se debe a que
w=xi1…xim if and only if wR=xRim…xRi1.
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.
fuente
1001010101010101…
puede ser unofcccccc…
ocaaa…
, y podríamos tener que esperar hasta el final de la entrada para decidir.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.
fuente
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.
fuente