[Algoritmi] Decodifica con Huffman
Salve, ho un dubbio algoritmico relativo alla codifica canonica di Huffman.
Supponendo di dover codificare questo insieme di caratteri: abbccccdddddddd, utilizzando l'algoritmo di Huffman otterrei il seguente albero binario:
Successivamente sfruttando le profondità delle foglie nell'albero:
d = 1
c = 2
b = 3
a = 3
ed utilizzando l'algoritmo per generare codici canonici:
ottengo i seguenti:
d = 0
c = 10
a = 110
b = 111
Il mio problema riguarda la decodifica, supponendo di avere a disposizione questa tabellina di codici ed una funzione che mi legga i caratteri compressi bit a bit, come posso fare per decodificare senza costruire l'albero?
grazie
Supponendo di dover codificare questo insieme di caratteri: abbccccdddddddd, utilizzando l'algoritmo di Huffman otterrei il seguente albero binario:
O / \ d O / \ c O / \ b a
Successivamente sfruttando le profondità delle foglie nell'albero:
d = 1
c = 2
b = 3
a = 3
ed utilizzando l'algoritmo per generare codici canonici:
/* codifica canonica a 0 */ void canonical_huff() { uint16_t len = 0; uint32_t code = 0; for (auto & i : _table) { code <<= i._numl - len; i._code = code; len = i._numl; ++code; } }
ottengo i seguenti:
d = 0
c = 10
a = 110
b = 111
Il mio problema riguarda la decodifica, supponendo di avere a disposizione questa tabellina di codici ed una funzione che mi legga i caratteri compressi bit a bit, come posso fare per decodificare senza costruire l'albero?
grazie
Risposte
Puoi usare per esempio un array per mappare una sequenza di bit ai simboli. Ma l'alternativa di costruirsi l'albero non la vedo così scomoda. C'è qualche ragione per cui vorresti evitarla?