Les fichiers sont ici
On va maintenant chercher à écrire un decompresseur lz78.
Dans le compresseur, nous avions codé le dictionnaire par un tableau T
.
Si on note dict[i]
le mot en position i du dictionnaire,
T[i][c]
est la position où se trouve le mot dict[i]c
(le mot en
position i
du dictionnaire auquel on a ajouté la lettre c
)
Dans le décompresseur, le dictionnaire va être codé par deux tableaux,
un tableau P
et un tableau C
, qui correspondent au tableau
"inverse" du tableau T
: si T[i][c] = j
, alors C[j] = c
et P[j] = i
.
L'idée est que C[j]
est la dernière lettre du mot en position j
du
dictionnaire, et P[j]
est la position du dictionnaire où se trouve
le mot dict[j]
privé de sa dernière lettre.
Autrement dit, le mot en position j du dictionnaire est le mot C[P[P[P..[j]]]]C[P[P[...[j]]]]...C[P[P[j]]]C[P[j]]C[j]
Dans le décompresseur, on fonctionne uniquement avec les tableaux C
et
P
, et rien d'autre.
test.lz78