¿Cuál es la fórmula general para expresar un dígito en el número mínimo de bits?

No estoy completamente seguro de entender la pregunta. Hay una forma única (hasta el isomorfismo) de expresar cualquier número en bits:

1 = 1
2 = 10
3 = 11
4 = 100
5 = 101

y así. Si el rango de números que desea expresar va de 1 a N, necesitará [math] \ lceil log_2 N \ rceil [/ math] bits para representarlo *. El algoritmo general es:

1. Divide N entre 2.
2. Escribe el resto a la izquierda de los números anteriores que has escrito.
3. Si no ha terminado, vuelva al paso 1.

11/2 = 5 resto 1
5/2 = 2 remanente 1
2/2 = 1 resto 0
1/2 = 0 recordatorio 1

Entonces escribimos esto como 1011. Hecho. Necesita [math] \ lceil log_2 11 \ rceil = 4 [/ math] bits, y no hay forma de hacerlo en menos sin más información.

Si tiene más información, puede comprimirla. Entonces, si supiera, por ejemplo, que todos sus números eran pares, podría eliminar un bit (ya que el bit más a la derecha siempre sería 0). Si sabía que había un 50% de posibilidades de que el número fuera 19, podría codificar 19 como “1” y cambiar todas las demás representaciones de bits en consecuencia (por ejemplo, escriba 1 como 10, 2 como 11, etc.) El algoritmo de codificación de Huffman hace un buen trabajo como un caso más general.

Pero sin más información sobre la distribución de números que desea escribir, en realidad solo hay una forma de escribirlo, y ese es el mínimo.


* En realidad, generalmente contamos desde 0, pero usé 1 aquí para simplificar la fórmula. No se corresponde exactamente con el algoritmo que sigue, pero sentí que la explicación era más clara si les pedía a los matemáticos que me dieran un grano de sal que tratar de ser precisos en el contexto de esta pregunta desconcertante.