Post by Olivier MassonBonjour,
Connaissez-vous une implémentation en php d'une algo de compression
n'utilisant que les caractères [0-9a-zA-Z], sans entête ni crc (le but
étant de compresser des chaines de 200 à 500 caractères) ?
Si on a du texte en français (ou sans doute n'importe quel en alphabet
latin et probablement d'autres similaires), un bon algorithme de
compression consiste à trier les caractères selon leur fréquence, puis
d'encoder ces caractères en n-tuplets.
Par exemple, le e devient 10 et l'espace, 11, les autres caractères
débutant par 0, et on a une série continue de 1 et de 0. Disons
qu'on a 001, 010, 000 et 011 pour 4 autres lettres, on obtient une
séquence comme 01010100101101010101010101011010010101010 que l'on
coupe en tranches de 6, pour un équivalent de tronquer en base 64.
Plus un caractère est moins fréquent, plus il occupe de bits.
On peut encoder au début de la chaîne les caractères dans l'ordre de
décompression (en base 64), à moins d'utiliser toujours la même
table de décompression pour toute la base (ce qui devrait être plus
efficace car on n'a plus à recalculer la fréquence dans chaque
chaîne).
Pour décoder, on reprendra à partir du début (il faut être synchro
pour décoder) et on décodera selon le nombre de bits par caractère.
Je pense qu'on doit trouver quelque part un bon de code pour
tester cet algorithme.
Évidemment, si c'est une image, l'algorithme ne donne rien. De
plus, en base 64, cela demande 64 caractères et non les 62 que tu
demandes...
Denis