web-dev-qa-db-fra.com

Quelle est la meilleure compression de fichiers de données binaires aléatoires que vous pouvez obtenir?

Plus précisément, quels programmes sont disponibles et quel est le taux de compression le plus élevé? J'ai essayé Google, mais il semble que l'expérience l'emporterait sur les résultats de recherche, alors je demande.

36
ox_n

Si des tailles de fichier pouvaient être spécifiées avec précision au bit, pour toute taille de fichier N, il y aurait précisément 2 ^ (N + 1) -1 fichiers possibles de N bits ou plus petits. Pour qu'un fichier de taille X soit mappé à une taille Y plus petite, certains fichiers de taille Y ou moins doivent être mappés à un fichier de taille X ou plus. La seule façon dont la compression sans perte peut fonctionner est si certains fichiers possibles peuvent être identifiés comme étant plus probables que d'autres; dans ce scénario, les fichiers probables seront réduits et ceux peu probables augmenteront.

À titre d'exemple simple, supposons que l'on souhaite stocker sans perte un fichier dans lequel les bits sont aléatoires et indépendants, mais au lieu de 50% des bits définis, seuls 33% le sont. On pourrait compresser un tel fichier en prenant chaque paire de bits et en écrivant "0" si les deux bits étaient effacés, "10" si le premier bit était activé et le second non, "110" si le second était activé et le premier non ou "111" si les deux bits ont été définis. L'effet serait que chaque paire de bits deviendrait un bit 44% du temps, deux bits 22% du temps et trois bits 33% du temps. Alors que certaines chaînes de données augmenteraient, d'autres diminueraient; les paires qui ont rétréci seraient - si la distribution de probabilité était comme prévu - plus nombreuses que celles qui grandissent (4/9 fichiers diminueraient un peu, 2/9 resteraient les mêmes et 3/9 augmenteraient, donc les paires continueraient) rétrécissement moyen de 1/9 bit, et les fichiers diminueraient en moyenne de 1/18 [puisque le chiffre 1/9 était de bits par paire]).

Notez que si les bits avaient une distribution de 50%, alors seulement 25% des paires deviendraient un bit, 25% resteraient deux bits et 50% deviendraient trois bits. Par conséquent, 25% des bits diminueraient et 50% augmenteraient, donc les paires augmenteraient en moyenne de 25% et les fichiers augmenteraient de 12,5%. Le seuil de rentabilité serait d'environ 38,2% des bits en cours de définition (deux moins la moyenne d'or), ce qui entraînerait une diminution de 38,2% des paires de bits et une croissance du même pourcentage.

60
supercat

Il n'y a pas d'algorithme de compression universellement meilleur. Différents algorithmes ont été inventés pour gérer différentes données.

Par exemple, la compression JPEG vous permet de compresser beaucoup d'images car cela n'a pas trop d'importance si le rouge de votre image est 0xFF ou 0xFE (généralement). Cependant, si vous essayez de compresser un document texte, des modifications comme celle-ci seraient désastreuses.

De plus, même entre deux algorithmes de compression conçus pour fonctionner avec le même type de données, vos résultats varient en fonction de vos données.

Exemple: Parfois, l'utilisation d'une archive tar gzip est plus petite, et parfois l'utilisation d'une archive tar bzip est plus petite.

Enfin, pour des données vraiment aléatoires de longueur suffisante, vos données auront probablement presque la même taille (ou même plus que) les données d'origine.

9
helloworld922

L'archiveur de fichiers 7z utilise le LZMA (Lempel Ziv Markow Algorithm) qui est un jeune algorithme de compression qui possède actuellement l'un des meilleurs taux de compression (voir la page Comparaison de compression Linux ).

Un autre avantage à côté du taux de compression élevé:

  • décompression rapide, environ 10 à 20 fois plus rapide que la compression
  • petite empreinte mémoire lors de la décompression d'un fichier
2
Christian Ammer