Existe-t-il un maximum connu pour combien de chaînes de 0 et de 1 peuvent être compressées?

38

Il y a longtemps, j'ai lu un article de journal dans lequel un professeur avait déclaré qu'il serait possible à l'avenir de compresser des données en deux bits (ou quelque chose du genre).

Ceci n’est bien sûr pas correct (et il se pourrait que ma mémoire de ce qu’il a dit n’est pas exacte). Naturellement, il ne serait pas pratique de compresser une chaîne de 0 et de 1 en deux bits, car (même si cela était techniquement possible), trop de types de chaînes différents finiraient par être compressés en deux bits identiques (car nous n'avons que '01 'et' 10 'à choisir).

Quoi qu'il en soit, cela m'a amené à réfléchir à la possibilité de compresser une chaîne de longueur arbitraire de 0 et de 1 selon un schéma. Pour ce type de chaîne, existe-t-il une relation connue entre la longueur de la chaîne (le rapport entre 0 et 1 importe peu) et la compression maximale?

En d'autres termes, existe-t-il un moyen de déterminer quelle est la longueur minimale (la plus petite possible) à laquelle une chaîne de 0 et de 1 peut être compressée?

(Ici, je suis intéressé par la compression mathématique maximale, et non par ce qui est techniquement possible.)

x457812
la source
7
Nous aurions également le choix entre 00 et 11. Mais l'argument est le même, si vous utilisez ceux-ci, vous ne pouvez compresser que quatre chaînes différentes.
RemcoGerlich
3
mathoverflow.net/q/160099/34859 : Si vous voyez ici le principe de la casse, il y aura toujours un nombre infini de chaînes qui ne peuvent pas être compressées ... Quel que soit l'algorithme utilisé (voir la section intitulée "Arrière-plan" dans la question
ARi
4
La compression dépend de vos connaissances sur la structure des données. Il y avait cet article sur la compression se déplace d'échecs qui montre comment l' ajout de connaissances permet une compression croissante.
spectras
1
Pouvez-vous préciser: La compression peut être "avec perte" ou "sans perte" (ou un "hybride" pouvant utiliser les deux). Parlez-vous de la compression maximale en utilisant uniquement des méthodes de compression "sans perte", ou incluez-vous (autorisez-vous) l'utilisation de méthodes de compression "avec perte"? En d’autres termes, je suppose qu’il ya 3 possibilités: rechercher la "compression maximale" où (1) les données doivent toujours pouvoir être décompressées exactement telles qu’elles étaient avant la compression, (2) les données doivent pouvoir être décompressées, mais une "perte" est autorisée (3) il n'est pas nécessaire que les données puissent être décompressées.
Kevin Fegan
Bonjour @KevinFegan, dans ce cas, il s'agirait de l'option 1: "les données doivent toujours pouvoir être décompressées exactement comme avant la compression"
x457812

Réponses:

45

La complexité de Kolmogorov est une approche pour formaliser cela mathématiquement. Malheureusement, calculer la complexité de Kolmogorov d'une chaîne est un problème non calculable. Voir aussi: Approximation de la complexité de Kolmogorov .

Il est possible d'obtenir de meilleurs résultats si vous analysez la source de la chaîne plutôt que la chaîne elle-même . En d'autres termes, la source peut souvent être modélisée comme un processus probabiliste, qui choisit de manière aléatoire une chaîne de caractères, en fonction d'une distribution donnée. L'entropie de cette distribution vous indique alors la meilleure compression mathématiquement possible (jusqu'à une petite constante additive).


Sur l'impossibilité d'une compression parfaite, vous pourriez également être intéressé par ce qui suit.

DW
la source
mais la compression est l'une des techniques d'estimation de l'entropie. La compression et l'entropie peuvent-elles être deux facettes de la même chose?
Paul Uszak
1
@PaulUszak, oui, ils sont très étroitement liés: voir, par exemple, le théorème de Shannon . Toutefois, veuillez noter que les commentaires ne doivent être utilisés que pour suggérer des améliorations / clarifications au poste, pas pour poser des questions de suivi. Pour poser une nouvelle question, utilisez le lien "Poser une question" dans la partie supérieure droite de la page.
DW
35

Pour toute chaîne donnée, il existe un schéma de compression qui le compresse en chaîne vide. Par conséquent, il n’est pas utile de demander dans quelle mesure une seule chaîne peut être compressée, mais plutôt dans quelle mesure une collection (ou distribution ) de chaînes peut être compressée, en moyenne. En général, étant donné une collection de chaînes, tout schéma de compression nécessite au moins bits ou plus pour coder une chaîne de la collection dans le pire des cas.log 2 NNlog2N

En outre, dans de nombreux cas, nous ne nous soucions pas de la reconstruction exacte . C'est ce qu'on appelle la compression avec perte , et c'est comment la musique et les vidéos sont compressées. Dans ce cas, la limite inférieure indiquée ci-dessus ne tient pas, mais vous pouvez trouver d'autres limites inférieures.

Yuval Filmus
la source
1
@ Veedrac Non, vous m'avez bien compris. Votre argument (plus ou moins) montre que tout schéma de codage pour chaînes nécessite bits pour certaines chaînes. Le canal latéral est la procédure de décompression. log 2 NNlog2N
Yuval Filmus
27

Voici un schéma simple capable de compresser des chaînes de bits arbitraires sans perte, avec le plus petit résultat obtenu: un bit:

SI la chaîne correspond de manière identique à l'enregistrement de la 9ème symphonie de Beethoven, quatrième mouvement, au format AAC stocké sur le disque dur de mon ordinateur, la sortie est alors un bit 0.

SI la chaîne est autre chose, alors la sortie est un seul bit '1' suivi d'une copie identique de la chaîne d'origine.

Ce schéma réduit une entrée possible à un bit exactement et augmente la longueur de chaque entrée. Il existe un principe général: si un algorithme de compression peut mapper n’importe quelle chaîne d’entrée sur une chaîne compressée et qu’un algorithme de décompression correspondant mappe toute chaîne compressée sur la chaîne d’origine, et que l’algorithme de compression mappe toute entrée sur une chaîne plus courte, il doit mapper des chaînes d'entrée à des chaînes plus longues.

gnasher729
la source
2
Bon travail de rendre la réponse claire et évidente. Il convient de noter que cela ressemble à ce qu'un bon algorithme de compression tente de faire: pour un domaine d'entrée donné, essayez de raccourcir les types d'entrées les plus communément attendus, en échange de l'allongement des entrées moins communes.
JBentley
6

Pour chaque schéma de compression que vous pouvez créer, il est possible de produire des données qui ne seront pas compressibles. Ainsi, même si votre schéma de compression est très efficace avec certains types de données, il ne sera jamais compressé systématiquement selon un certain rapport.

La manière de produire un exemple de données non compressibles pour un algorithme de compression particulier est simple: prenez n'importe quel type de données et passez-les à plusieurs reprises dans l'algorithme de compression jusqu'à ce que la taille ne diminue plus.

Ainsi, la compressibilité d'une chaîne de bits n'est pas vraiment fonction de la longueur de la chaîne, mais de sa complexité par rapport à l'algorithme de compression.

m69 '' sournois et peu accueillant ''
la source
Bienvenue! Notez que cela ne s'applique qu'à la compression sans perte. La compression avec pertes peut compresser toutes les chaînes (au moins, à condition que vous acceptiez l'algorithme "Renvoyer une chaîne vide" en tant qu'algorithme de compression avec pertes. ;-)).
David Richerby
@ David Richerby C'est vrai, bien sûr. Mais j’ai eu l’impression de la question que l’opérateur posait à propos de la compression sans perte, car il n’a pas beaucoup de sens de discuter de la compression maximale d’un système avec perte; l'idée de pouvoir utiliser des valeurs extrêmes inutilisables est inhérente au concept de compression avec pertes.
m69 '' sournois et peu accueillant ''
Oui, je pense que c'est une interprétation raisonnable.
David Richerby
-2

Il existe un algorithme intéressant et complètement différent utilisé par les systèmes de sauvegarde d’entreprise. L'idée est que si vous avez une entreprise avec 10 000 ordinateurs, beaucoup de ces ordinateurs contiendront beaucoup de fichiers identiques. Par exemple, un courrier électronique envoyé à tous les membres de l'entreprise peut se retrouver sous la forme d'un fichier identique sur chaque disque dur.

Donc, un système de sauvegarde essayant de sauvegarder un fichier doit évidemment essayer de compresser le fichier pour économiser de l'espace, mais le système de sauvegarde vérifie d'abord si un fichier absolument identique est déjà enregistré! Ainsi, au lieu de sauvegarder quoi que ce soit , le système de sauvegarde ne fait tout simplement que rappeler par exemple que vous avez le numéro de fichier 1 487 578 sur le système de sauvegarde de votre disque dur.

Ceci est particulièrement efficace, par exemple, lorsque 10 000 utilisateurs ont tous le même système d'exploitation et les mêmes applications installées. Pour les utilisateurs individuels, ce n'est pas très utile du tout.

gnasher729
la source
4
C'est intéressant mais je ne vois pas comment cela répond à la question. La question demande des limites sur la compression, pas une discussion générale sur les sauvegardes d'entreprise.
David Richerby
Cette opération s'appelle la déduplication et est effectuée à l'aide de hachages. Il faut beaucoup de RAM pour stocker un hachage de 128 bits pour chaque bloc sur le disque. ZFS peut faire cela pour faire en sorte que certains blocs partagent un peu d’espace de stockage de copie sur écriture. Mais ce type de problème de compression (lorsque vous essayez de compresser un ensemble de données volumineux pour lequel vous avez besoin d'un accès aléatoire, et qui change trop rapidement pour une compression de flux normale, mais avec une redondance au niveau des blocs) n'est pas pertinent en tant que réponse à cette question. question.
Peter Cordes