Sulla mia grande ricerca per la compressione / decompressione di file con un'implementazione Java della codifica di Huffman ( link ) per un incarico scolastico , Ora sono al punto di creare un elenco di codici prefisso . Tali codici vengono utilizzati durante la decompressione di un file. Fondamentalmente, il codice è composto da zero e uno, che sono usati per seguire un percorso in un albero di Huffman (a sinistra oa destra) per, in definitiva, trovare un byte.
In questa immagine di Wikipedia, per raggiungere il carattere m
il codice prefisso sarebbe 0111
L'ideaèchequandocomprimiilfile,inpraticaconvertituttiibytedelfileinprefissi(tendonoadesserepiùpiccolidi8bit,quindic'èunguadagno).
Quindiognivoltacheilcaratterem
appareinunfile(cheinbinarioèinrealtà1101101
),saràsostituitoda0111
(seabbiamousatol'alberosopra).
Pertanto,1101101110110111011011101101
diventa0111011101110111
nelfilecompresso.
Stobeneconquello.Macosasuccedesesuccede:
- Nelfiledacomprimereesisteunsolobyteunivoco,adesempio
1101101
. - Cisono1000ditalebyte.
Tecnicamente,ilcodiceprefissoditalebytesarebbe...nessuno,perchénonc'èalcunpercorsodaseguire,giusto?Vogliodire,esistecomunqueunsolouniquebyte,quindil'alberohaunsolonodo.
Pertanto,seilcodiceprefissoènessuno,nonsareiingradodiscrivereilcodiceprefissonelfilecompresso,perché,beh,nonc'ènientedascrivere.
Cheportaquestoproblema:comecomprimere/decomprimeretalefileseèimpossibilescrivereuncodiceprefissodurantelacompressione?(usandolacodificadiHuffman,acausadelleregolediassegnazionedellascuola)
Questotutorialsembraspiegareunpo'meglioicodiciprefisso: