11 votes

Compression efficace de fichiers similaires

J'ai souvent besoin de compresser des fichiers qui sont très similaires les uns aux autres.

Actuellement, j'utilise 7Zip, qui compresse un fichier de 16 Go à 1,2 Go en 35 minutes environ avec 8 cœurs et des paramètres Ultra.

Il me semble qu'une grande partie de ce temps est consacrée au calcul du dictionnaire à utiliser pour la compression. Comme les fichiers sont très similaires, le dictionnaire réellement utilisé l'est probablement aussi.

Existe-t-il un outil de compression basé sur Windows (7Zip avec une option que je ne connais pas, ou un autre outil) qui peut enregistrer le dictionnaire et réutiliser ce dictionnaire enregistré pour les fichiers suivants ?

Existe-t-il une meilleure façon d'aborder le problème du maintien d'un taux de compression similaire à celui que j'ai, tout en compressant beaucoup plus rapidement ?

5voto

Breakthrough Points 33693

El Lempel-Ziv-Welch (LZW) est un algorithme de compression intrinsèquement intensif en termes de calcul, la majeure partie du travail consistant à calculer le dictionnaire. C'est littéralement la façon dont LZW fonctionne.

L'algorithme lui-même ajoute une nouvelle entrée au dictionnaire pour chaque "symbole" suivant qu'il balaie. Ainsi, à chaque itération, une nouvelle entrée est ajoutée au dictionnaire. En fait, le dictionnaire devient la copie comprimée du fichier, et est donc en fait la uniquement que la compression LZW passe un temps significatif à calculer en premier lieu.


Si vous avez utilisé quelque chose comme Codage de Huffman la réutilisation du dictionnaire serait en effet possible (au prix d'un taux de compression/taille éventuellement sous-optimal). Cependant, la plupart des algorithmes et outils de compression modernes utilisent l'algorithme LZW pour des raisons d'efficacité et de rapidité (la compression de Huffman nécessiterait deux passages sur les données [un pour générer l'arbre/table de Huffman, un autre pour compresser réellement les données], alors que LZW peut être réalisé en un seul passage).

2voto

Dennis Points 46916

Contrairement à l'algorithme DEFLATE, le LZMA de 7-Zip utilise par défaut la compression solide, qui tire parti de la redondance inter-fichier. Cela fonctionnera avec les paramètres par défaut tant que les fichiers sont suffisamment petits.

Avec les paramètres par défaut de 2 GB pour Taille du bloc solide Ainsi, un fichier de 16 Go est en fait compressé en 8 morceaux distincts.

Comme @Breakthorugh l'a déjà dit, le dictionnaire est généré à la volée. Vous pouvez le vérifier empiriquement en définissant Taille du bloc solide a Solide (compresse tous les fichiers en une seule fois) et Non-solide (compressez chaque fichier séparément).

Augmenter le Taille du bloc solide entraînera en fait un ralentissement, mais il se peut que le taux de compression soit bien meilleur. Par exemple, la compression de deux fichiers identiques donnera une archive presque deux fois plus grande avec une compression non solide.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X