On 3/29/2013 1:47 AM, Antonio S. wrote:
Dal punto di vista teorica il mio loader e` sicuramente non meno efficiente, dato che puo` caricare tranquillamente un albero di Huffman a due valori. Infatti con il mio loader ogni nodo non terminale dell'albero puo` avere dai 2 ai 4 figli.Grazie Paolo.Non ho capito una cosa del tuo loader: dei quattro valori, due hanno durata doppia rispetto agli altri, il che mi sembra non sia previsto dalla codifica di H. Il risultato è + o - efficiente di una codifica H. a due valori, e perché?
Il fatto che possa essere piu` efficiente si puo` vedere per esempio se vuoi codificare la
stringa ABCD.Con Huffman tradizionale avresti un albero bilanciato a due livelli, cioe` con due bit per simbolo ed un totale di 8 bit per la stringa intera.
Nel caso di 4 valori un livello e` sufficiente, anche se per due dei quattro simboli la durata e` doppia. In totale la durata della codifica e` 6 "bits", con un risparmio del 25% rispetto all'Huffman tradizionale.
Inoltre si posso associare simboli piu` ricorrenti ai segnali piu` corti. Per esempio in
AABBCDsia A che B avrebbero durata 1, e C e D durata 2. La durata totale e` 8, contro i 12 dell'Huffman tradizionale (risparmio del 33%).
Dire fino a quanto sia piu` efficiente e` una domanda difficile, perche` non credo che - a differenza dell'Huffman tradizionale - si possa trovare l'albero ottimale in tempo polinomiale. Per Manic Miner sono riuscito ad ottenere un risparmio sui tempi di caricamento del 30%, (con circa 3/4 dei nodi a quattro figli) ma onestamente non so quanto di meglio si possa ottenere.
Comunque ho un'idea che renderebbe tutto quello che ho detto obsoleto, ottenendo 4 valori nella stessa unita` di tempo. Ma prima voglio risolvere i problemi con il loader che ho adesso.
-p