Cette idée m'est venue en tant qu'enfant apprenant à programmer et rencontrant pour la première fois les PRNG. Je ne sais toujours pas à quel point c'est réaliste, mais maintenant, il y a échange de pile.
Voici un schéma de 14 ans pour un algorithme de compression incroyable:
Prenez un PRNG et ensemencez-le avec une graine s
pour obtenir une longue séquence d'octets pseudo-aléatoires. Pour transmettre cette séquence à une autre partie, il vous suffit de communiquer une description du PRNG, le germe approprié et la longueur du message. Pour une séquence assez longue, cette description serait beaucoup plus courte que la séquence elle-même.
Supposons maintenant que je puisse inverser le processus. Avec suffisamment de temps et de ressources informatiques, je pourrais faire une recherche brutale et trouver une graine (et PRNG, ou en d'autres termes: un programme) qui produirait la séquence souhaitée (disons une photo amusante de chats espiègles).
Les PRNG se répètent après qu'un nombre suffisant de bits ait été généré, mais par rapport aux cycles "typiques", mon message est assez court, ce qui ne semble pas vraiment poser de problème.
Voilà, un moyen efficace (si rube-goldbergien) de compresser les données.
Donc, en supposant que:
- La séquence que je souhaite compresser est finie et connue d'avance.
- Je ne manque ni d'argent ni de temps (tant qu'un montant limité des deux est requis)
J'aimerais savoir:
- Y at-il une faille fondamentale dans le raisonnement derrière le schéma?
- Quelle est la méthode standard pour analyser ce type d’expériences de pensée?
Sommaire
Il arrive souvent que de bonnes réponses indiquent clairement non seulement la réponse, mais aussi ce que je demandais vraiment. Merci pour la patience de chacun et ses réponses détaillées.
Voici ma nième tentative de résumé des réponses:
- L'angle PRNG / seed ne contribue en rien, ce n'est qu'un programme qui produit en sortie la séquence souhaitée.
- Principe du casier: Il y a beaucoup plus de messages de longueur> k qu'il n'y a de programmes (générant des messages) de longueur <= k. Ainsi, certaines séquences ne peuvent tout simplement pas être la sortie d'un programme plus court que le message.
- Il est à noter que l'interprète du programme (message) est nécessairement fixé à l'avance. Et sa conception détermine le (petit) sous-ensemble de messages pouvant être générés lorsqu'un message de longueur k est reçu.
À ce stade, l’idée originale de PRNG est déjà morte, mais il reste au moins une dernière question à régler:
- Q: Pourrais-je avoir de la chance et découvrir que mon message long (mais fini) est la sortie d'un programme de longueur <k bits?
Strictement parlant, ce n'est pas une question de hasard, car la signification de chaque message (programme) possible doit être connue à l'avance. Soit il est la signification de certains messages de <k bits ou il n'est pas .
Si je choisis un message aléatoire de> = k bits au hasard (pourquoi le ferais-je?), J’aurais de toute façon une probabilité de disparition capable de l’envoyer en utilisant moins de k bits, et une quasi-certitude de ne pas pouvoir envoyer du tout en utilisant moins de k bits.
OTOH, si je choisis un message spécifique de> = k bits parmi ceux qui sont la sortie d'un programme de moins de k bits (en supposant qu'il existe un tel message), je profite en fait des bits déjà transmis au récepteur (la conception de l'interprète), qui compte dans le message transféré.
Finalement:
- Q: Quelle est toute cette affaire de complexité entropie / kolmogorov ?
En fin de compte, les deux nous disent la même chose que le principe (plus simple) de casier nous dit à quel point nous pouvons compresser: peut-être pas du tout, peut-être certains, mais certainement pas autant que nous le souhaitons (sauf si nous trichons).