Articulo de referencia

Código de coma

Un código de coma es un tipo de código sin prefijo en el que una coma , un símbolo o secuencia de símbolos en particular, aparece al final de una palabra clave y nunca aparece e...

Un código de coma es un tipo de código sin prefijo en el que una coma , un símbolo o secuencia de símbolos en particular, aparece al final de una palabra clave y nunca aparece en ningún otro lugar. [ 1 ] Esta es una forma intuitiva de expresar matrices.

Por ejemplo, la codificación de Fibonacci es un código de coma en el que la coma es 11. 11y 1011son palabras clave válidas de Fibonacci, pero 101, 0111, y 11011no lo son.

Ejemplos

  • Codificación unaria , en la que la coma es 0. Esto permite valores NULL (cuando el código y la coma son una sola 0, el valor puede tomarse como NULL o 0).
  • Codificación de Fibonacci , en la que la coma es 11. La coma de 11 implica que los dos códigos que se utilizan para representar datos son 0,10. Esto se puede traducir a los bits exactos 0,1 al representar cadenas de bits o números arbitrarios. Si se representan cadenas de bits o números arbitrarios utilizando este método, simplemente se escribiría un '0' para un 0 y un '10' para un 1, y un '11' para la coma/separador y se repetiría el separador/coma para un NULL. Esto construye un código similar a Fibonacci que se parece a un código de Fibonacci pero se traduce directamente a la cadena de bits en lugar del número representado por la serie de Fibonacci. Con la codificación de Fibonacci estándar, se representa cada entero como un código de Fibonacci, y el mapeo de entero->código->codificación y decodificación de entero requiere análisis de Fibonacci. Con los códigos similares a la secuencia de Fibonacci, se toma una cadena de bits o un número bit a bit y se escribe como una serie de 0 y 10, terminando la cadena/número con un '11'. Esto permite expresar matrices.

El código de Fibonacci se puede descomponer en la parte de datos y la coma previa (no el 11, sino la cantidad de 1s en los datos). Este es un código de Elias perforado , que simplemente escribe la cantidad de 1s en los dígitos que siguen. O bien, se puede construir el código de Fibonacci a partir del código de Elias perforado escribiendo un 10 por cada 1 en los datos y un 11 por el último 1 en la cadena de datos. Si los datos son una cadena de bits aleatoria, entonces se puede escribir 0 para 0 en la cadena de bits y 10 para 1 en la cadena de bits y un 11 como coma/separador. Esto permite un valor NULL, que es simplemente 11.

Este método permite expresar una cadena de bits o un número de longitud n en 1,5n+2 bits, suponiendo que los 0 y los 1 están presentes en igual medida en los datos.

  • Coma cargada en códigos parecidos a Fibonacci: si se garantiza que hay un bit en la cadena de bits, entonces se puede colocar textualmente después de la coma '11' y el resto de los bits se traducen 0 -> 0 y 1 -> 10.

Este método permite expresar una cadena de bits no nula en 1,5n+1,5 bits, suponiendo que los 0 y los 1 están presentes en igual medida en los datos.

  • Todos los códigos Huffman se pueden convertir a códigos de coma anteponiendo una 1al código completo y utilizando una sola 0como código y la coma.

La definición de palabra es una serie de símbolos que terminan en coma, el equivalente a un espacio en blanco. [ 2 ]

  • Axioma del 50% de comas en todos los datos: se puede demostrar que todos los datos implícitos, específicamente los datos biyectivos de longitud variable, constan exactamente de un 50% de comas.

Todos los datos desordenados o los datos de la misma longitud debidamente seleccionados exhiben la llamada probabilidad implícita (si es un código válido, entonces la probabilidad de su ocurrencia es12lminortegramoth{\displaystyle {\frac {1}{2^{longitud}}}}).

Dichos datos, que pueden denominarse "datos genéricos", pueden analizarse utilizando cualquier código unario entrelazado como encabezados, donde los bits biyectivos adicionales (igual a la longitud del código unario recién leído) se leen como datos, mientras que el código unario sirve como introducción o encabezado para los datos. Este encabezado actúa como una coma. Los datos pueden leerse de forma entrelazada entre cada bit del encabezado o de forma posterior a la lectura, cuando los datos se leen solo después de que se haya leído todo el código de encabezado unario, como en la codificación Chen-Ho .

Mediante técnicas de recorrido aleatorio y suma estadística se puede observar que todos los datos genéricos tienen un encabezado o coma de un promedio de 2 bits y datos de 2 bits adicionales (mínimo 1).

Esto también permite un algoritmo de incremento de base económico antes de la transmisión en canales de comunicación no binarios, como los canales de comunicación en base 3 o base 5.

Donde '?' es '1' o '2' para el valor del dígito biyectivo que no requiere procesamiento adicional.

Por supuesto, usamos una sola coma para separar cada campo de datos, lo que demuestra que todos los datos constan de un 50 % de comas. El cociente de coste por carácter de la comunicación de base superior debe mantener valores cercanos a los logaritmos.logramo(basmi)logramo(2){\textstyle {\frac {log(base)}{log(2)}}}para los datos y menos de 2 bits para el carácter de coma para mantener la rentabilidad en este caso.

Este método garantiza que después de cada coma aparezca un '1' o un '2', y esta propiedad puede resultar útil al diseñar teniendo en cuenta los problemas de sincronización en la transmisión.

Puede resultar algo costoso convertir un valor binario conocido (el último valor subrayado no requiere técnicamente conversión a ternario) a ternario (consideramos la coma como el dígito '3'), a menos que los costos de los bits ternarios se reduzcan a valores similares a los de los bits binarios, de modo que este bit pueda multiplexarse ​​en un canal binario separado si los costos coinciden (esto puede requerir la lectura de una porción adicional de 'cola'/final de 2 bits de datos útiles o un código unario completo conocido de alrededor de 2 bits como relleno para el canal binario (desde después del primer bit del primer cambio, ya que este no es un código decodificable instantáneamente, simplemente léalo si utiliza un código unario decodificable instantáneamente) para que sea de alrededor de3{\displaystyle 3}bits similares a los 2 bits ternarios promedio que quedan en el canal primario equivalente a2logramo(3)logramo(2)=3.17{\textstyle 2*{\frac {log(3)}{log(2)}}=3,17}bits antes de que se tengan en cuenta las comparaciones de costos). El relleno es para intentar asegurar que los datos relevantes de todos los flujos lleguen en momentos similares entre sí, ya que de lo contrario tendríamos un bit (el último bit subrayado arriba) en el canal binario y alrededor de 3,17 bits en el canal ternario (incluyendo solo comas para todas las comas) (de nuevo, sin tener en cuenta un modo de transmisión completamente diferente con una latencia posiblemente diferente).

Sin considerar la multiplexación, este método tiene una eficiencia de lectura de 3 dígitos ternarios para una lectura de 4 bits binarios o 1,33 bits. O4/3logramo(3)logramo(2)=84.12%{\textstyle {\frac {4/3}{\frac {log(3)}{log(2)}}}=84,12\%}

Este método permite expresar una cadena de bits o un número de longitud n en 2n bits, suponiendo que los 0 y los 1 están presentes en igual medida en los datos.

  • 66,66% (2/3) de comas en todos los datos axioma - Se puede demostrar que todos los datos implícitos, específicamente los datos de longitud variable, constan exactamente de un 66,66% (2/3) de comas.

Donde '?' es '1' o '2' para el valor del dígito biyectivo que no requiere procesamiento adicional. Este método resulta en una similitud estadística con una simple 'lectura implícita' de códigos Huffman de base 3: 0, 10, 11(netos 2/3 o 66,66% de comas).

Mediante técnicas de recorrido aleatorio y suma estadística se puede observar que todos los datos genéricos tienen un encabezado o coma de un promedio de 2 bits y datos de un bit adicional (mínimo 0).

Esto no garantiza que haya un '1' o un '2' después de cada '0' (coma), una propiedad que puede ser útil al diseñar teniendo en cuenta las cuestiones de sincronización en la transmisión.

Este método tiene una eficiencia de lectura de 2 dígitos ternarios para una lectura de 3 bits binarios o 1,5 bits binarios/dígito ternario. O3/2logramo(3)logramo(2)=94,64%{\textstyle {\frac {3/2}{\frac {log(3)}{log(2)}}}=94,64\%}

Este método permite expresar una cadena de bits o un número de longitud n en 2n+1 bits, suponiendo que los 0 y los 1 están presentes en igual medida en los datos. Se puede asumir que el valor 0 son 0 bits o una cadena vacía "" seguida de un 1.

  • 34,375% | 31,25% (~ 1/3) escribir comas para obtener ganancias de eficiencia usando partición de números: las lecturas y escrituras implícitas usando técnicas de partición de números (números 'm' divididos en 'n' particiones dan como resultado n^m permutaciones) similares a la codificación de Chen-Ho y Hertz muestran una mayor eficiencia tanto de lecturas como de escrituras similar a una distribución casi aleatoria. Por lo tanto, el uso de códigos tiene menos sentido y el uso de bases más altas se vuelve más importante. De manera similar, una coma de 'escritura' se convierte en cualquier número en la base, una coma de 'lectura' es el encabezado que se muestra a continuación, códigos de base 4 de Huffman: 0, 10, 110, 111.

La principal ventaja de esta técnica, además de una mayor eficiencia, es que no requiere conversión de base, lo que obligaría a leer primero todo el flujo y luego convertirlo. La desventaja es que la longitud promedio del número aumenta y, de forma similar a la generación de números aleatorios , surgen problemas de sincronización que rigen la transmisión ternaria. Con m=2 y n=2, obtenemos, sin olvidar que un valor de '(2)' es esencialmente bits 0:

Por lo tanto, este método tiene una eficiencia de lectura de 2 dígitos ternarios para una lectura de503+253+12.54+12.53=3.125{\textstyle 50*3+25*3+12.5*4+12.5*3=3.125}bits binarios o 1,5625 bits binarios/dígito ternario. O3.12512logramo(3)logramo(2)=98,58%{\textstyle {\frac {3.125*{\frac {1}{2}}}{\frac {log(3)}{log(2)}}}=98.58\%}.

Una eficiencia de escritura de 2 dígitos ternarios para una escritura de493+293+294+193=3.22{\textstyle {\frac {4}{9}}*3+{\frac {2}{9}}*3+{\frac {2}{9}}*4+{\frac {1}{9}}*3=3.22}bits o 1,61 bits binarios/dígito ternario, ologramo(3)logramo(2)29912=98,38%{\textstyle {\frac {\frac {log(3)}{log(2)}}{{\frac {29}{9}}*{\frac {1}{2}}}}=98,38\%}

  • Números cardinales para una conversión de base eficiente: dado que se ha comprobado que los códigos de coma son muy similares a la conversión de base, y la única preocupación es la eficiencia y la sincronización, se propone la conversión/mapeo directo de 19 bits binarios.219=524288{\textstyle 2^{19}=524288}números hasta 12 tritios ternarios312=531441{\textstyle 3^{12}=531441}Los números permiten una eficiencia de219312=98,65%{\textstyle {\frac {2^{19}}{3^{12}}}=98,65\%}ologramo321912=99.9%{\textstyle {\frac {log_{3}{2^{19}}}{12}}=99,9\%}eficiencia dependiendo del método de cálculo. Esto funciona porque219<312{\textstyle 2^{19}<3^{12}}y219{\textstyle 2^{19}}312{\textstyle 3^{12}}Esto, por supuesto, es más bien una construcción teórica y no menciona la sincronización al intentar aplicarla a métodos de transmisión ternarios. Sin embargo, deja531441524288=7153{\textstyle 531441-524288=7153}códigos para diseñar teniendo en cuenta las cuestiones de sincronización.

Véase también

Referencias

  1. Wade, Graham (8 de septiembre de 1994). Codificación y procesamiento de señales . Cambridge University Press. pág.  56. ISBN 978-0-521-42336-6.
  2. ^ Salomón, David; Motta, Giovanni (2010). Manual de compresión de datos . SpringerLink Bücher (5ª ed.). Londres: Springer Londres. págs.62 , 116. ISBN   978-1-84882-902-2.