Como la mayoría de la gente aquí sabe, utilizando 4 bits, podemos contar de 0 a 15 (0123456789ABCDEF en hexadecimal). Pero si solo contáramos hasta 9, todavía estaríamos usando 4 bits, y los dígitos de la A a la F se desperdiciarían.
Sin embargo, la página de Código QR de Wikipedia afirma que al utilizar solo dígitos numéricos del 0 al 9 se utilizan 3 bits por carácter, lo cual es correcto desde un punto de vista estadístico. Y aún así un tercio de un bit no es un objeto físico, y enviar un número del 0 al 9 utiliza al menos 4 bits según tengo entendido.
¿Hay alguna manera de utilizar las combinaciones desperdiciadas para enviar un carácter con fracciones de bits de manera efectiva?
De acuerdo, permíteme dar un ejemplo: Los dos dígitos "27" deben ser enviados. Con técnicas normales de codificación, los bits enviados serían 00100111. Podríamos entonces imaginar un sistema que reemplazaría el dígito '2' por el dígito 'E' o 'F', dependiendo del siguiente bit; en este caso, el siguiente bit es 0, por lo que el '2' se reemplaza por 'E'. La cadena de bits resultante sería entonces 11010111. Por otro lado, si los dígitos "28" deben ser enviados, el primer bit después del '2' es un 1, por lo que se reemplaza por el dígito 'F' en su lugar, dando como resultado la cadena 11111000.
En ambos casos, se ha logrado una economía de 1 bit, porque un nibble se utilizó para dos caracteres diferentes. En otras palabras, se utilizan tres y medio bits en cada carácter.
2 votos
Para obtener una perspectiva diferente sobre el empaquetamiento de valores en un espacio de dígitos más pequeño, echa un vistazo a las computadoras ternarias (es.wikipedia.org/wiki/Computadora_ternaria). ¡Si es lo suficientemente bueno para Knuth, es lo suficientemente bueno para mí!
3 votos
Mejor aún es reconocer que puedes calcular
(10 * primer_dígito) + segundo_dígito
y codificarlo en 7 bits, representando 0...99, con los códigos 100-127 reservados para otras cosas. Y hay aún más ahorros con 3 dígitos comprimidos en 10 bits.0 votos
Para enviar los 100 valores diferentes por separado, lo mejor que puedes obtener es empaquetarlos en 7 bits. Si tienes más dígitos, el empaquetado será más eficiente. Si tienes menos de 64 valores para enviar, puedes hacerlo usando solo 6 bits.