Esta idea se me ocurrió cuando era un niño aprendiendo a programar y en el primer encuentro con PRNG. Todavía no sé cuán realista es, pero ahora hay intercambio de pila.
Aquí hay un esquema de 14 años para un sorprendente algoritmo de compresión:
Tome un PRNG y siembre con semilla s
para obtener una secuencia larga de bytes pseudoaleatorios. Para transmitir esa secuencia a otra parte, solo necesita comunicar una descripción del PRNG, la semilla apropiada y la longitud del mensaje. Para una secuencia lo suficientemente larga, esa descripción sería mucho más corta que la secuencia misma.
Ahora supongamos que puedo invertir el proceso. Con suficiente tiempo y recursos computacionales, podría hacer una búsqueda de fuerza bruta y encontrar una semilla (y PRNG, o en otras palabras: un programa) que produzca mi secuencia deseada (Digamos que una foto divertida de gatos siendo traviesos).
Los PRNG se repiten después de que se haya generado un número suficientemente grande de bits, pero en comparación con los ciclos "típicos", mi mensaje es bastante corto, por lo que esto no parece ser un gran problema.
Voila, una forma efectiva (aunque rube-Goldbergian) de comprimir datos.
Entonces, suponiendo:
- La secuencia que deseo comprimir es finita y conocida de antemano.
- No tengo poco efectivo ni tiempo (siempre y cuando se requiera una cantidad finita de ambos)
Me gustaría saber:
- ¿Existe un defecto fundamental en el razonamiento detrás del esquema?
- ¿Cuál es la forma estándar de analizar este tipo de experimentos mentales?
Resumen
A menudo, las buenas respuestas dejan en claro no solo la respuesta, sino qué es lo que realmente estaba preguntando. Gracias por la paciencia de todos y las respuestas detalladas.
Aquí está mi enésimo intento de un resumen de las respuestas:
- El ángulo PRNG / seed no aporta nada, no es más que un programa que produce la secuencia deseada como salida.
- El principio del casillero: hay muchos más mensajes de longitud> k que programas de generación de mensajes <= k. Entonces, algunas secuencias simplemente no pueden ser la salida de un programa más corto que el mensaje.
- Vale la pena mencionar que el intérprete del programa (mensaje) está necesariamente arreglado de antemano. Y su diseño determina el subconjunto (pequeño) de mensajes que se pueden generar cuando se recibe un mensaje de longitud k.
En este punto, la idea original de PRNG ya está muerta, pero hay al menos una última pregunta que resolver:
- P: ¿Podría tener suerte y descubrir que mi mensaje largo (pero finito) resulta ser la salida de un programa de longitud <k bits?
Estrictamente hablando, no es una cuestión de casualidad ya que el significado de cada mensaje (programa) posible debe conocerse de antemano. O es el significado de algún mensaje de <k bits o no lo es .
Si elijo un mensaje aleatorio de> = k bits aleatoriamente (¿por qué lo haría?), En cualquier caso, tendría una probabilidad de desaparecer de poder enviarlo con menos de k bits, y una certeza de no poder enviar en absoluto utilizando menos de k bits.
OTOH, si elijo un mensaje específico de> = k bits de aquellos que son la salida de un programa de menos de k bits (suponiendo que exista tal mensaje), entonces, en efecto, estoy aprovechando los bits ya transmitidos al receptor (el diseño del intérprete), que cuenta como parte del mensaje transferido.
Finalmente:
- P: ¿Qué es todo este negocio de entropía / complejidad de kolmogorov ?
En última instancia, ambos nos dicen lo mismo que el principio de casillero (más simple) nos dice cuánto podemos comprimir: quizás nada, tal vez algo, pero ciertamente no tanto como imaginamos (a menos que hagamos trampa).