web-dev-qa-db-fra.com

Algorithmes de compression de données

Je me demandais si quelqu'un avait une liste d'algorithmes de compression de données. Je ne connais pratiquement rien sur la compression des données et j'espérais en savoir plus sur les différents algorithmes et voir lesquels sont les plus récents et doivent encore être développés sur de nombreux ASIC.

J'espère implémenter une compression de données ASIC qui est indépendante du type de données entrant (audio, vidéo, images, etc.)

Si ma question est trop ouverte, faites-le moi savoir et je réviserai. Merci

32
Veridian

Il existe une tonne d'algorithmes de compression. Ce dont vous avez besoin ici, c'est d'un algorithme de compression sans perte. Un algorithme de compression sans perte compresse les données de sorte qu'elles peuvent être décompressées pour obtenir exactement ce qui a été donné avant la compression. L'inverse serait un algorithme de compression avec perte. La compression avec perte peut supprimer des données d'un fichier. Les images PNG utilisent une compression sans perte tandis que les images JPEG peuvent et utilisent souvent une compression avec perte.

Certains des algorithmes de compression les plus connus comprennent:

Les archives Zip utilisent une combinaison de codage Huffman et LZ77 pour donner des temps de compression et de décompression rapides et des taux de compression raisonnablement bons.

Le LZ77 est à peu près une forme généralisée de RLE et il donne souvent de bien meilleurs résultats.

Huffman permet aux octets les plus répétés de représenter le moins de bits. Imaginez un fichier texte qui ressemble à ceci:

aaaaaaaabbbbbcccdd

Une implémentation typique de Huffman aboutirait à la carte suivante:

Bits Character
   0         a
  10         b
 110         c
1110         d

Ainsi, le fichier serait compressé comme suit:

00000000 10101010 10110110 11011101 11000000
                                       ^^^^^
                              Padding bits required

18 octets descendent à 5. Bien sûr, le tableau doit être inclus dans le fichier. Cet algorithme fonctionne mieux avec plus de données: P

Alex Allain a n bel article sur l'algorithme de compression Huffman au cas où le Wiki ne suffirait pas.

N'hésitez pas à demander plus d'informations. Ce sujet est sacrément large.

38

Voici quelques algorithmes sans perte (peuvent parfaitement récupérer les données d'origine en utilisant ces derniers):

  • Code Huffman
  • LZ78 (et variation LZW)
  • LZ77
  • Codage arithmétique
  • Sequitur
  • prédiction avec correspondance partielle (ppm)

Beaucoup de formats bien connus comme png ou gif utilisent des variantes ou des combinaisons de ceux-ci.

D'autre part, il existe également des algorithmes avec perte (compromettre la précision pour compresser vos données, mais fonctionne souvent assez bien). Les techniques de pointe avec perte combinent des idées de codage différentiel, de quantification et de DCT, entre autres.

Pour en savoir plus sur la compression des données, je recommande https://www.elsevier.com/books/introduction-to-data-compression/sayood/978-0-12-809474-7 . Il s'agit d'un texte d'introduction très accessible. La 3e édition en ligne en pdf.

5
skim

Mon article A Survey Of Architectural Approaches for Data Compression in Cache and Main Memory Systems (permalink here ) examine de nombreux algorithmes de compression et également des techniques pour les utiliser dans les processeurs modernes. Il passe en revue les algorithmes/techniques de compression de qualité commerciale et de qualité commerciale, vous pouvez donc en trouver un qui n'a pas encore été implémenté dans ASIC.

4
user984260

Il y a énormément d'algorithmes de compression de données. Si vous cherchez quelque chose d'encyclopédique, je recommande le Handbook of Data Compression de Salomon et al, qui est à peu près aussi complet que vous êtes susceptible d'obtenir (et contient de bonnes sections sur les principes et la pratique de compression des données).

Ma meilleure supposition est que la compression basée sur ASIC est généralement implémentée pour une application particulière, ou en tant qu'élément spécialisé d'un SoC, plutôt qu'en tant que puce de compression autonome. Je doute également que la recherche d'un format de compression "le plus récent et le plus efficace" soit la voie à suivre - je m'attendrais à ce que la standardisation, la maturité et l'adaptation à un usage particulier soient plus importantes.

4
comingstorm

L'algorithme LZW ou Lempel Ziv est un excellent algorithme sans perte. Pseudocode ici: http://oldwww.rasip.fer.hr/research/compress/algorithms/fund/lz/lzw.html

0
schilippe