Codifica di Huffman: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m wikilink |
m clean up |
||
(91 versioni intermedie di 74 utenti non mostrate) | |||
Riga 1:
[[File:Huffman tree.svg|thumb|upright=1.8|Codifica di Huffman della frase "this is an example of a huffman tree" con rappresentazione binaria e indice di frequenza delle lettere.]]
La [[codifica]] di Huffman usa un metodo specifico per scegliere la rappresentazione di ciascun simbolo, risultando in un [[codice prefisso|codice senza prefissi]] (cioè in cui nessuna stringa binaria di nessun simbolo è il [[sottostringa|prefisso]] della stringa binaria di nessun altro simbolo) che esprime il carattere più frequente nella maniera più breve possibile. È stato dimostrato che la codifica di Huffman è il più efficiente sistema di compressione di questo tipo: nessun'altra mappatura di simboli in stringhe binarie può produrre un risultato più breve nel caso in cui le frequenze di simboli effettive corrispondono a quelle usate per creare il codice.
Per un insieme di simboli la cui [[cardinalità]] è una [[potenza di due]] e con una distribuzione probabilistica uniforme, la codifica di Huffman equivale alla semplice codifica a blocchi binari.
== Storia ==
Nel [[1951]] a [[David A. Huffman]] e
Un'idea simile era stata usata in precedenza nella [[Codifica di Shannon-Fano]] (creata da [[Claude Shannon]], inventore della [[teoria dell'informazione]], e Fano, il docente di Huffman
== Tecnica base ==
Questa tecnica funziona creando un [[albero binario]] di simboli:
# Ordina i simboli, in una lista, in base al conteggio delle loro occorrenze.
# Ripeti i seguenti passi finché la lista non contiene un unico simbolo:
## Prendi dalla lista i due simboli con la frequenza di conteggio minore. Crea un albero di Huffman che ha come "figli" questi due elementi, e crea un nodo "genitore"
## Assegna la somma del conteggio delle frequenze dei figli al genitore e ponilo nella lista in modo da mantenere l'ordine.
## Cancella i figli dalla lista.
# Assegna una parola codice a ogni elemento basandosi sul path a partire dalla radice.
== Caratteristiche principali ==
Le frequenze usate possono essere quelle generiche nel dominio dell'applicazione basate su medie precalcolate, o possono essere le frequenze trovate nel testo che deve essere compresso (questa variante richiede che la [[tabella di frequenza]] sia registrata insieme
La codifica di Huffman è ottimale quando la probabilità di ciascun simbolo in input è una potenza negativa di due. Le codifiche senza prefissi tendono
Casi limite della codifica di Huffman sono collegati alla [[Sequenza di Fibonacci]].
La [[codifica aritmetica]] produce dei leggeri guadagni su quella di Huffman, ma questi guadagni risultano convenienti solamente se l'algoritmo per la codifica aritmetica è ottimale, in quanto una codifica ''banale'' richiede una maggiore complessità computazionale. Questa versione ''
== Variazioni ==
=== Codifica
Una variazione detta ''adattiva'' calcola le frequenze dinamicamente in base alle frequenze effettive più recenti nella stringa sorgente, in maniera analoga alla famiglia di algoritmi [[LZ77|LZ]].
Riga 39 ⟶ 40:
=== Codifica di Huffman con costi per lettera diseguali ===
Nel problema standard della codifica di Huffman, è dato un insieme di parole e per ciascuna
La ''Codifica di Huffman con costi per lettera diseguali'' è una generalizzazione in cui le lettere dell'alfabeto di codifica possono avere lunghezze non uniformi. L'obiettivo è di minimizzare la media pesata della lunghezza delle parole-codice.
== Applicazioni ==
Oggi la codifica di Huffman è spesso usata come complemento di altri metodi di compressione: sono
== Altri progetti ==
{{interprogetto|preposizione=sulla}}
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* L'articolo originale di Huffman: D.A. Huffman, "[https://web.archive.org/web/20050530145744/http://compression.graphicon.ru/download/articles/huff/huffman_1952_minimum-redundancy-codes.pdf A method for the construction of minimum-redundancy codes]", Proceedings of the I.R.E.,
* Il background: [http://www.huffmancoding.com/
* {{cita web|http://huffman.ooz.ie/|Generatore di grafici visuali dell'Albero di Huffman}}
* [http://mathforum.org/discuss/sci.math/t/207334 La codica di Huffman e la serie di Fibonacci]▼
* {{cita web|https://rosettacode.org/wiki/Huffman_coding#Python|Codifica di Huffman in Python}}
* {{cita web |1=http://alexvn.freeservers.com/s1/huffman_template_algorithm.html |2=Codifica a base-n a Template |accesso=18 giugno 2005 |urlarchivio=https://web.archive.org/web/20050618085402/http://alexvn.freeservers.com/s1/huffman_template_algorithm.html |dataarchivio=18 giugno 2005 |urlmorto=sì }}
* Mordecai J. Golin, Claire Kenyon, Neal E. Young "[http://www.cs.ust.hk/faculty/golin/pubs/LOP_PTAS_STOC.pdf Codifica di Huffman con costi per lettera diseguali]", [http://www.informatik.uni-trier.de/~ley/db/conf/stoc/stoc2002.html STOC 2002]: 785-791▼
▲*
* [http://www.cbloom.com/algs/statisti.html Codifiche statistiche]▼
* {{cita web |1=http://semillon.wpi.edu/~aofa/AofA/msg00040.html |2=Calcolare la codifica di Huffman su una Macchina di Turing |accesso=31 luglio 2005 |urlarchivio=https://web.archive.org/web/20050731091059/http://semillon.wpi.edu/~aofa/AofA/msg00040.html |dataarchivio=31 luglio 2005 |urlmorto=sì }}
* [http://www.cs.sfu.ca/CC/365/li/squeeze/Huffman.html Dimostrazione del funzionamento di questo algoritmo]▼
▲* Mordecai J. Golin, Claire Kenyon, Neal E. Young "[http://www.cs.ust.hk/faculty/golin/pubs/LOP_PTAS_STOC.pdf Codifica di Huffman con costi per lettera diseguali]", [http://www.informatik.uni-trier.de/~ley/db/conf/stoc/stoc2002.html STOC 2002] {{Webarchive|url=https://web.archive.org/web/20150116064338/http://www.informatik.uni-trier.de/~ley/db/conf/stoc/stoc2002.html |data=16 gennaio 2015 }}: 785-791
▲*
{{Portale|ingegneria}}
[[Categoria:
[[Categoria:Algoritmi di compressione]]
[[Categoria:Compressione dei dati]]
[[Categoria:Alberi binari]]
|