40 votes

Quelle est la meilleure compression de fichier de données binaires aléatoires que vous puissiez réaliser ?

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

67voto

supercat Points 25534

Si la taille des fichiers pouvait être spécifiée au bit près, pour toute taille de fichier N, il y aurait précisément 2^(N+1)-1 fichiers possibles de N bits ou moins. Pour qu'un fichier de taille X soit mis en correspondance avec une taille Y plus petite, un fichier de taille Y ou plus petite doit être mis en correspondance avec un fichier de taille X ou plus grande. La compression sans perte ne peut fonctionner que 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 les fichiers improbables 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 que 50 % des bits soient activés, seuls 33 % le sont. On pourrait compresser un tel fichier en prenant chaque paire de bits et en écrivant "0" si les deux bits sont libres, "10" si le premier bit est activé et le second non, "110" si le second est activé et le premier non, ou "111" si les deux bits sont activés. 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 diminueraient seraient - si la distribution de probabilité était conforme aux prévisions - plus nombreuses que celles qui augmenteraient (4/9 fichiers diminueraient d'un bit, 2/9 resteraient identiques et 3/9 augmenteraient, de sorte que les paires diminueraient en moyenne de 1/9 bit et que les fichiers diminueraient en moyenne de 1/18 [puisque le chiffre 1/9 correspond aux bits par paire]).

Notez que si les bits avaient réellement 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, de sorte que les paires augmenteraient en moyenne de 25 % et les fichiers de 12,5 %. Le seuil de rentabilité se situerait à environ 38,2 % de bits fixés (deux moins le juste milieu), ce qui donnerait 38,2 % de paires de bits en moins et le même pourcentage en plus.

10voto

helloworld922 Points 4195

Il n'existe pas de meilleur algorithme de compression universel. Différents algorithmes ont été inventés pour traiter différentes données.

Par exemple, la compression JPEG vous permet de comprimer des images de manière assez importante, car il importe peu que le rouge de votre image soit 0xFF ou 0xFE (en général). Cependant, si vous essayez de compresser un document texte, des modifications de ce type seraient désastreuses.

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

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

Enfin, pour des données véritablement aléatoires et d'une longueur suffisante, vos données auront probablement presque la même taille (ou même plus grande) que les données originales.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X