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:codice:O / \ d O / \ c O / \ b a
d = 1
c = 2
b = 3
a = 3
ed utilizzando l'algoritmo per generare codici canonici:
codice:/* 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 ricostruire l'albero?
grazie