Le concept de base est qu'au lieu d'utiliser huit bits pour représenter chaque octet, vous utilisez des représentations plus courtes pour des octets ou des séquences d'octets plus fréquents.
Par exemple, si votre fichier est constitué uniquement de 0x41 octet (A
) seize fois répétées, alors au lieu de représenter comme la séquence 8 bits 01000001
raccourcissent à la séquence 1 bits 0
. Ensuite, le fichier peut être représenté par 0000000000000000
(seize 0
s).Ainsi, le fichier de l'octet 0x41
répété seize fois peut être représenté par le fichier constitué de l'octet 0x00
répété deux fois.
donc ce que nous avons ici est que ce fichier (0x41
répété seize fois) les bits 01000001
ne véhiculent pas d'informations supplémentaires sur le bit 0
. Donc, dans ce cas, nous jetons les bits étrangers pour obtenir une représentation plus courte.
C'est l'idée de base derrière la compression.
Comme autre exemple, considérons le modèle de huit octets
0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48
et maintenant le répéter 2048 fois. Une façon de suivre l'approche ci-dessus est de représenter les octets en utilisant trois bits.
000 0x41
001 0x42
010 0x43
011 0x44
100 0x45
101 0x46
110 0x47
111 0x48
Maintenant, nous pouvons représenter le motif d'octets ci-dessus par 00000101 00111001 01110111
(ce qui est le modèle à trois octets 0x05 0x39 0x77
) répété 2048 fois.
Mais une approche encore mieux est de représenter le motif d'octets
0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48
par le bit unique 0
. Ensuite, nous pouvons représenter le modèle d'octets ci-dessus par 0
répété 2048 fois qui devient l'octet 0x00
répété 256 fois. Maintenant, nous avons seulement besoin de stocker le dictionnaire
0 -> 0x41 0x42 0x43 0x44 0x45 0x46 0x47 0x48
et le motif de l'octet 0x00
répété 256 fois et nous compresserait les fichier de 16384 octets (modulo le dictionnaire) 256 octets.
Voilà, en un mot, comment fonctionne la compression. Toute l'affaire revient à trouver des représentations courtes et efficaces des octets et des séquences d'octets dans un fichier donné. C'est l'idée simple, mais les détails (trouver la représentation) peuvent être assez difficiles.
Voir par exemple:
- Data compression
- Run length encoding
- Huffman compression
- Shannon-Fano coding
- LZW
me semble que vous devez aller à wikip edia et fais de la lecture. – skaffman
Facile! Convertir en binaire et supprimer les zéros –
http://www.howstuffworks.com/file-compression.htm –