Malheureusement, un tel programme n'existe pas.
Pour voir pourquoi il en est ainsi, nous devons faire un peu de maths. Tout d'abord, nous allons compter jusqu'à combien de chaînes binaires, il y a de longueur n. Chacun des bits peut être 0 ou 1, ce qui nous donne l'un des deux choix pour chacun de ces bits. Puisqu'il y a deux choix par bit et de n bits, il y a donc un total de 2n chaînes binaires de longueur n.
Maintenant, supposons que nous voulons construire un algorithme de compression qui toujours comprime un bitstring de longueur n dans un bitstring de longueur inférieure à n. Pour que cela fonctionne, nous avons besoin de compter jusqu'à combien de différentes chaînes de longueur inférieure à n, il existe. Eh bien, c'est le nombre de chaînes de bits de longueur 0, plus le nombre de chaînes de bits de longueur 1, plus le nombre de chaînes de bits de longueur 2, etc., tout le chemin jusqu'à n - 1. Ce total est
20 + 21 + 22 + ... + 2n - 1
À l'aide d'un peu de maths, on ne peut obtenir que ce nombre est égal à 2n - 1. En d'autres termes, le nombre total de chaînes de bits de longueur inférieure à n est plus petit que le nombre de chaînes de bits de longueur n.
Mais c'est un problème. Pour que nous puissions avoir une compression sans perte algorithme de toujours les cartes une chaîne de longueur n d'une chaîne de caractères de longueur au plus n - 1, on aurait un moyen d'associer à chaque bitstring de longueur n avec certains plus courte bitstring à ce qu'aucune des deux chaînes de bits de longueur n sont associés à la même plus courte bitstream. De cette façon, nous pouvons compresser la chaîne de correspondre à l'associé chaîne plus courte, et l'on peut décompresser par l'inversion de la cartographie. La restriction qu'aucune des deux chaînes de bits de longueur n de la carte à la même chaîne plus courte, est ce qui rend ce sans perte - si deux de la longueur n des chaînes de bits ont été à la carte à la même plus courte bitstring, puis, quand il est venu le temps de décompresser de la chaîne, il n'y aurait pas un moyen de savoir qui des deux premières chaînes de bits nous avait comprimé.
C'est là que nous arrivons à un problème. Puisqu'il y a 2n différentes chaînes de bits de longueur n et 2n-1 courtes chaînes de bits, il n'est pas possible, nous pouvons jumeler chaque bitstring de longueur n avec certains plus courte bitstring sans affectation d'au moins deux de la longueur n des chaînes de bits de la même chaîne plus courte. Cela signifie que peu importe combien nous essayons, peu importe comment intelligent que nous sommes, et peu importe la façon créative, nous obtenons avec notre algorithme de compression, il est difficile de mathématiques limite qui dit qu'on ne peut pas toujours rendre le texte plus court.
Alors, comment fonctionne cette carte à votre problème? Eh bien, si nous obtenons une chaîne de texte de longueur au moins 10000 et besoin à la sortie d'un plus court programme qui imprime, alors nous devrions disposer d'une méthode de cartographie de chacun des 210000 chaînes de longueur 10000 sur les 210000 - 1 chaînes de caractères de longueur de moins de 10000. Que la cartographie a d'autres propriétés, à savoir que nous avons toujours à produire un programme valide, mais c'est hors de propos ici - il n'existe tout simplement pas assez de chaînes plus courtes pour faire le tour. En conséquence, le problème que vous souhaitez résoudre est impossible.
Cela dit, nous pourrions être en mesure d'obtenir un programme qui permet de compresser tous, mais l'une des chaînes de longueur 10000 à une courte chaîne. En fait, on peut trouver un algorithme de compression qui fait cela, ce qui signifie qu'avec la probabilité 1 - 210000 toute chaîne de caractères de longueur 10000 pourrait être compressé. C'est une forte probabilité que, si nous avons gardé la cueillette des chaînes pour la durée de vie de l'univers, nous serions presque certainement jamais deviner Une Mauvaise Chaîne.
Pour plus de lecture, il y a un concept de la théorie de l'information appelé la complexité de Kolmogorov, qui est la longueur du plus petit programme nécessaire pour produire une chaîne donnée. Certaines chaînes sont facilement comprimé (par exemple, abababababababab), tandis que d'autres ne le sont pas (par exemple, sdkjhdbvljkhwqe0235089). Il existe des chaînes de caractères qui sont appelés incompressible chaînes, dont la chaîne ne peut pas être comprimé dans tout petit espace. Cela signifie que tout programme qui allait imprimer cette chaîne devrait être au moins aussi longue que la chaîne donnée. Pour une bonne introduction à la Complexité de Kolmogorov, vous souhaiterez peut-être consulter le Chapitre 6 de "l'Introduction à la Théorie de Calcul, Deuxième Édition" par Michael Sipser, qui offre un excellent aperçu de quelques-uns de la glacière résultats. Pour plus de rigueur et en profondeur, il est conseillé de lire les "Éléments de Théorie de l'Information", chapitre 14.
Espérons que cette aide!