[JAVASCRIPT] – Compresser de l’ascii / Algorithme
Coucou la compagnie !
Tout d'abord, je m'excuse de n'avoir pas eu le temps de vous écrire hier ...
J'ai aujourd'hui un sujet plutôt fun à aborder avec vous qui est la "compression".
Comment un fichier peut-il perdre 10%, 20%, 30%, ... de sa taille ?
Haha, je vous propose que nous analysions ceci ensemble.
Aussi, pour ce sujet j'ai réalisé un petit algorithme pour compresser du texte.
L'idée :
Nous avons une phrase.
Il faut découper cette phrase en mots
Ne garder que les mots uniques.
Stocker la position des doublons par rapport à celle de la première occurrence.
Graphiquement ça donne ceci
Notre phrase ici est :
ABCD BAC CDAD DCB ABCD DA BAC BAC
Ce qui nous donne 33 caractères (en incluant les espaces)
En ne gardant que les mots uniques nous obtenons ceci :
ABCD BAC CDAD DCB DA
Donc nous supprimons :
ABCD BAC BAC
Soit 12 caractères.
Néanmoins, nous devons quand même savoir qu'il existe et où il se place.
D'où l'importance de récupérer et stocker quelque part leurs positions.
On va donc se baser sur la première position de ces doublons.
ABCD est le premier mot, la prochaine occurrence de ABCD est quatre mots plus loin,
J'enregistre :
ABCD:4
BAC est le deuxième mot, la prochaine occurrence de BAC est cinq mots plus loin,
J'enregistre :
ABCD:4
BAC:5
Sachant qu'il y 'a 2 occurrences de BAC, j'enregistre l’occurrence suivante qui est à six mots de la première :
ABCD:4,
BAC:5,6
... si bien qu'a la fin, je me retrouve avec ceci :
ABCD:4
BAC:5,6
CDAD
DCB
DA
En compressant le tout, je me retrouve avec ceci :
ABCD:4-BAC:5,6-CDAD-DCB-DA
Soit 26 caractères !
Nous venons donc de passer d'un texte de 33 à 26 caractères soit une réduction de taille d'environ 22%
Pour décompresser ce texte, je n'aurais plus qu'à lire dans l'autre le texte compressé, en réajustant les positions lorsqu'il est indiqué l'emplacement d'un mot.
Bien sur ça reste de la théorie et j'ai simplifié les choses ;)
Il y a un million de façon de compresser les données, néanmoins, j'espère vous avoir apporté ici, une compréhension du fonctionnement et du type de méthodologique qui peut être appliquée.
Je vous offre donc 2 fonctions de javascript que j'ai écrite rien que pour vous afin de réaliser cette compression :
Petit exemple d'utilisation :
Résultat ...