Esta es una pregunta teórica, por lo que es de esperar que muchos detalles aquí no sean computables en la práctica o incluso en teoría.¿Cuál es la tasa de compresión máxima teóricamente posible?
Digamos que tengo una cadena s
que quiero comprimir. El resultado debe ser un binario autoextraíble (puede ser un ensamblador x86, pero también puede ser otro lenguaje de bajo nivel hipotético de Turing completo) que da como resultado s
.
Ahora, podemos iterar fácilmente a través de todos los binarios y programas posibles, ordenados por tamaño. Deje B_s
ser la sub-lista de estos binarios que producen s
(por supuesto B_s
es incomputable).
Como cada conjunto de enteros positivos debe tener un mínimo, debe haber un programa más pequeño b_min_s
en B_s
.
¿Para qué idiomas (es decir, un conjunto de cadenas) sabemos algo sobre el tamaño de b_min_s
? Tal vez solo una estimación. (Puedo construir algunos ejemplos triviales donde puedo siempre incluso calcular B_s
y también b_min_s
, pero estoy interesado en los idiomas más interesantes.)
Recuerdo algunos programas muy ingeniosos de los viejos tiempos, como los cargadores de arranque que se sobrescribían varias veces. Probablemente, para lograr un tamaño total mínimo del programa autoextraíble, el programa podría usar su propio texto de alguna manera, por ejemplo, como fuente de constantes. –