Sto leggendo l'articolo NJ Larsson, A. Moffat: Compressione basata su dizionario offline , che descrive un algoritmo di compressione che, se lo capisco correttamente, è abbastanza simile alla codifica delle coppie di byte .
Dato una stringa di lunghezza , Sto cercando di capire come comprimerlo in modo lineare, , tempo con questo metodo di compressione. Com'è fatto esattamente? Ho letto il documento, ma ancora non capisco come raggiungono il tempo lineare, quindi forse lo capirei spiegato in un modo diverso.
La mia prima confusione sorge nel primo passo dell'algoritmo, in cui troviamo la coppia più comune, ad esempio nella abcababcabc
coppia più comune ab
sarebbe sostituita da un nuovo simbolo, diciamo XcXXcXc
. Non capisco come possiamo trovare la coppia più comune abbastanza rapidamente. Il mio approccio ingenuo sarebbe quello di guardare prima la prima coppia ab
e poi contare il numero di occorrenze, quindi guardare la coppia successiva bc
e contare il numero di occorrenze, ecc. Tuttavia questo già darebbesolo per trovare la coppia più comune una volta .
Successivamente, anche se ho capito come trovare la coppia più comune in tempo. Il mio prossimo problema è che, non dobbiamo trovare la coppia più comune fino avolte? E quindi questo darebbe un tempo totale di?