Je lis l'article NJ Larsson, A. Moffat: Compression basée sur un dictionnaire hors ligne , qui décrit un algorithme de compression qui, si je le comprends bien, est assez similaire au codage par paire d'octets .
Étant donné une chaîne de longueur , j'essaie de comprendre comment on peut la compresser en temps linéaire avec cette méthode de compression. Comment cela se fait-il exactement? J'ai lu le document, mais je ne comprends toujours pas comment ils atteignent le temps linéaire, alors peut-être que je comprendrais qu'il soit expliqué d'une manière différente.
Ma première confusion survient dans la première étape de l'algorithme, où nous trouvons la paire la plus courante, par exemple dans abcababcabc
la paire la plus courante ab
serait remplacée par un nouveau symbole, disons XcXXcXc
. Je ne comprends pas comment trouver la paire la plus courante assez rapidement. Mon approche naïve serait de regarder d'abord la première paire ab
, puis de compter le nombre d'occurrences, puis de regarder la paire suivante bc
et de compter le nombre d'occurrences, etc. Cependant, cela donnerait déjà juste pour trouver la paire la plus courante une fois .
Ensuite, même si j'ai compris comment trouver la paire la plus courante en temps . Mon prochain problème est que, ne devons-nous pas trouver la paire la plus courante jusqu'à fois? Et donc cela donnerait un temps total de ?