carattere a b c d e f cod. var

Documenti analoghi
Algoritmi e Strutture Dati Laboratorio 15/12/2008. Daniele Loiacono

Algoritmi Greedy. Tecniche Algoritmiche: tecnica greedy (o golosa) Un esempio

Programmazione Greedy I codici di Huffman

Lunghezza media. Teorema Codice D-ario prefisso per v.c. X soddisfa. L H D (X). Uguaglianza vale sse D l i. = p i. . p.1/27

Tecniche Algoritmiche: tecnica greedy (o golosa)

Def. La lunghezza media L(C) di un codice C per una v.c. Obiettivo: Codice ottimo rispetto alla lunghezza media. Lunghezza media di un codice

Informatica 3. LEZIONE 16: Heap - Codifica di Huffmann. Modulo 1: Heap e code di priorità Modulo 2: Esempio applicativo: codifica di Huffmann

Compressione Dati. Teorema codifica sorgente: Entropia fornisce un limite sia inferiore che superiore al numero di bit per simbolo sorgente.. p.

Definizioni. Soluzione ottima: migliore soluzione possibile Soluzione ottima localmente: soluzione ottima in un dominio contiguo. Il paradigma greedy

Algoritmi e strutture dati. Codici di Huffman

Introduzione alla codifica entropica

Frequenza lettere in inglese

Codifica di Huffman e Lempel-Ziv-Welch A L B E R T O B E L U S S I A N N O A C C A D E M I C O /

Codifica di Huffman e Lempel-Ziv-Welch

Tecniche Algoritmiche/2 Algoritmi greedy

Problema del rappresentante o dei turisti

Algoritmi e Strutture Dati

RISOLUZIONE IN LOGICA PROPOSIZIONALE. Giovanna D Agostino Dipartimento di Matemaica e Informatica, Università di Udine

Spesso sono definite anche le seguenti operazioni:

Appunti lezione Capitolo 13 Programmazione dinamica

Codifica di Huffman e Lempel-Ziv-Welch

Code a priorità Una coda a priorità è una struttura dati astratta che permette di rappresentare un insieme di elementi su cui è definita una

Suffix Trees. Docente: Nicolò Cesa-Bianchi versione 21 settembre 2017

La codifica di sorgente

Esercitazione 4 Algoritmi greedy

LA CODIFICA. CANALE IDEALE E REALE

Un problema di programmazione dei lavori

ESERCIZI SUGLI HEAP BINOMIALI (CAPITOLO 20) Catalano Pietro 56/100592

Code a priorità. Progettazione di Algoritmi Matricole congrue a 1. Docente: Annalisa De Bonis

Teoria dell informazione

Algoritmi e Strutture Dati

Alberi binari: definizione e alcune proprietà

Algoritmi e Strutture Dati. HeapSort

Automi a stati finiti

Algoritmi e Strutture Dati. HeapSort

Appunti lezione Capitolo 14 Greedy

Algoritmi e Strutture Dati

La codifica di sorgente

Algoritmi e Strutture Dati

Alberi ed Alberi Binari di Ricerca

Sommario della lezione

2.2 Alberi di supporto di costo ottimo

CODIFICA DELL INFORMAZIONE

Alberi binari e alberi binari di ricerca

1 Esercizio - caso particolare di ottimalità

Alberi binari e alberi binari di ricerca

Gli heap. Sommario. Algoritmi e Programmazione Avanzata. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Algoritmi e Strutture Dati

Alberi binari e alberi binari di ricerca

2.2 Alberi di supporto di costo ottimo

Informazione e sua rappresentazione: codifica. Il concetto di informazione

Gli heap. Sommario. Fulvio CORNO - Matteo SONZA REORDA Dip. Automatica e Informatica Politecnico di Torino

Algoritmi e Strutture Dati

Comunicazioni Elettriche II

Algoritmi e Strutture Dati

ALGORITMI CORSO DI STUDIO IN INFORMATICA (laurea triennale) UNIVERSITÀ DEGLI STUDI DI CATANIA ANNO ACCADEMICO 2014/15

Algoritmi e Strutture di Dati

Modello di sistema di comunicazione

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

Informazione e Registri - 2

Problemi di ordinamento

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

La codifica digitale

Alberi ed Alberi Binari

2.2 Alberi di supporto di costo ottimo

Informazione e sua rappresentazione: codifica

Divide et impera (Divide and Conquer) Dividi il problema in sottoproblemi piu` semplici e risolvili ricorsivamente

PROVETTE D ESAME. Algoritmi e Strutture Dati

Alberi. CORDA Informatica. A. Ferrari. Testi da. Marco Bernardo Edoardo Bontà. Dispense del Corso di. Algoritmi e Strutture Dati

PROBLEMA DEI CAMMINI MINIMI [CORMEN ET AL. CAP. 24] Il costo di cammino minimo da un vertice u ad un vertice v è definito nel seguente modo:

Rappresentazione dei dati

La Rappresentazione dell Informazione

2.2 Alberi di supporto di costo ottimo

Complementi di Algoritmi e Strutture Dati. Soluzioni prova scritta 7 giugno 2017

La codifica binaria. Sommario

Grafi e reti di flusso

Esistenza ed unicità per equazioni differenziali

Espressioni aritmetiche

Teoria dell Informazione II Anno Accademico Lezione 6-7

Corso di Calcolatori Elettronici I A.A Lezione 2 Rappresentazione dei numeri: sistemi di numerazione posizionale ing. Alessandro Cilardo

che si ripete n volte, con n molto grande. Determinare il rate ottenuto dalla codifica LZ77, usando i parametri:

Rappresentazione delle frazioni proprie Aritmetica in binario Barbara Masucci

Il Branch & Bound. Definizione 1. Sia S R n. La famiglia S = {S 1, S 2,..., S k S} tale che S 1 S 2 S k = S viene detta suddivisione di S.

Nozioni di base (II Parte)

In questa lezione. Costruire un max-heap. [CLRS01] cap. 6 par Prof. E. Fachini - Intr. Alg.

Ordinamenti per confronto: albero di decisione

Il concetto di informazione

Dati e Algoritmi I (Pietracaprina) Esercizi su Priority Queue e Heap

Introduzione ai grafi

Informazione e sua rappresentazione: codifica

ESERCIZI DI ALGORITMI E STRUTTURE DATI 1 Parte 1. Livio Colussi Dipartimento di Matematica Pura ed Applicata Università di Padova

Rango di una matrice e teorema di Rouché-Capelli

RAPPRESENTAZIONE DELLE INFORMAZIONI

Problema del cammino minimo

La codifica delle immagini

c A (a c = b) Le ipotesi che abbiamo ci dicono che esistono h, k A tali che:

Algoritmi e Strutture Dati (Mod. B) Algoritmi Greedy (parte I)

Transcript:

Codici prefissi Un codice prefisso è un codice in cui nessuna parola codice è prefisso (parte iniziale) di un altra Ogni codice a lunghezza fissa è ovviamente prefisso. Ma anche il codice a lunghezza variabile che abbiamo appena visto è un codice prefisso. Codifica e decodifica sono semplici con i codici prefissi.

Con il codice prefisso carattere a b c d e f cod. var. la codifica della stringa abc è La decodifica è pure semplice. Siccome nessuna parola codice è prefisso di un altra, la prima parola codice del file codificato risulta univocamente determinata.

Per la decodifica basta quindi:. individuare la prima parola codice del file codificato 2. tradurla nel carattere originale e aggiungere tale carattere al file decodificato 3. rimuovere la parola codice dal file codificato 4. ripetere l operazione per i caratteri successivi

Ad esempio con il codice carattere a b c d e f cod. var. la suddivisione in parole codice della stringa di bit è a cui corrisponde la stringa aabe Per facilitare la suddivisione del file codificato in parole codice è comodo rappresentare il codice con un albero binario.

Esempio: il codice a lunghezza fissa carattere a b c d e f frequenza 57 3 2 24 9 5 cod. fisso ha la rappresentazione ad albero 2 6 4 7 36 4 a:57 b:3 c:2 d:24 e:9 f:5

In realtà, come albero binario, la rappresentazione sarebbe 2 6 4 7 36 4 a:57 b:3 c:2 d:24 e:9 f:5 Noi eliminiamo le foglie e chiamiamo foglie i nodi interni senza figli

Il codice a lunghezza variabile carattere a b c d e f frequenza 57 3 2 24 9 5 cod. var. è rappresentato 2 a:57 63 25 38 c:2 b:3 4 d:24 f:5 e:9

La lunghezza in bit del file codificato con il codice rappresentato da un albero T è: in cui la sommatoria è estesa a tutti i caratteri c dell alfabeto Σ, f c è la frequenza del carattere c e d T (c) è la profondità della foglia che rappresenta il carattere c nell albero T Nota: assumiamo che l alfabeto Σ contenga almeno due caratteri. In caso contrario basta un numero per rappresentare il file: la sua lunghezza

La lunghezza in bit del file codificato è anche: 2 a:57 63 25 38 c:2 b:3 4 d:24 f:5 e:9 in cui la sommatoria è estesa alle frequenze x.f di tutti i nodi interni x dell albero T.

Costruzione dell albero di Huffman: carattere a b c d e f frequenza 57 3 2 24 9 5 Q f:5 e:9 c:2 b:3 d:24 a:57 Q c:2 b:3 4 d:24 f:5 e:9 a:57 Q 4 d:24 25 a:57 f:5 e:9 c:2 b:3

Q 4 d:24 25 a:57 f:5 e:9 c:2 b:3 Q 25 38 a:57 c:2 b:3 4 d:24 f:5 e:9

Q 25 38 a:57 c:2 b:3 4 d:24 f:5 e:9 Q a:57 63 25 38 c:2 b:3 4 d:24 f:5 e:9

Q a:57 63 Q 2 25 38 a:57 63 c:2 b:3 4 d:24 25 38 f:5 e:9 c:2 b:3 4 d:24 f:5 e:9

Implementazione dell algoritmo goloso di Huffman Huffman(c, f, n) Q = Ø // coda con priorità for i = to n Push(Q, Nodo(f i, c i )) for j = n downto 2 x = ExtractMin(Q) y = ExtractMin(Q) Push(Q, Nodo(x, y)) return ExtractMin(Q) Nodo(f, c) costruttore dei nodi foglia Nodo(x, y) costruttore dei nodi interni

Assumendo che la coda Q venga realizzata con un heap, le operazioni Insert ed ExtractMin richiedono tempo O(log n). Pertanto l algoritmo richiede tempo O(n log n) (dove n è il numero di caratteri dell alfabeto).

L algoritmo è goloso perché ad ogni passo costruisce il nodo interno avente frequenza minima possibile. Ricordiamo infatti che Siamo sicuri che in questo modo otteniamo sempre un codice ottimo?

Elementi della strategia golosa Ingredienti comuni a molti problemi risolvibili con la strategia golosa: Sottostruttura ottima: Ogni soluzione ottima non elementare si ottiene da soluzioni ottime di sottoproblemi. Proprietà della scelta golosa: La scelta localmente ottima (golosa) non pregiudica la possibilità di arrivare ad una soluzione globalmente ottima.

Se T è ottimo ogni nodo interno ha due figli (altrimenti togliendo il nodo si otterrebbe un codice migliore) c:2 a:57 b:3 2 25 63 38 25 4 f:5 e:9 9 d:24 a:57 2 63 25 38 c:2 b:3 4 d:24 f:5 e:9 Se T è ottimo esistono due foglie sorelle x ed y a profondità massima.

Proprietà (sottostruttura ottima) Sia T l albero di un codice prefisso ottimo per l alfabeto Σ e siano a ed b i caratteri associati a due foglie sorelle x ed y di T. Se consideriamo il padre z di x ed y come foglia associata ad un nuovo carattere c con frequenza f c = z.f = f a + f b allora l albero T'=T - {x,y} rappresenta un codice prefisso ottimo per l alfabeto Σ' = Σ - {a,b} {c}

Supponiamo, per assurdo, esista un albero S' per Σ' tale che B(S') < B(T'). Aggiungendo ad S' le foglie x ed y come figlie del nodo z (che in S' è una foglia) otterremmo un albero S per Σ tale che B(S) < B(T) contro l ipotesi che T sia ottimo.

a x z b y T c z T S a x z b y S c z

Proprietà (scelta golosa) Siano a e b due caratteri di Σ aventi frequenze f a ed f b minime Esiste un codice prefisso ottimo in cui le parole codice di a e b hanno uguale lunghezza e differiscono soltanto per l ultimo bit. Se i codici di a e b differiscono soltanto per l ultimo bit, nell albero del codice le foglie a e b sono figlie dello stesso nodo, cioè sorelle.

Attenzione: Il Lemma non dice che ciò è vero per ogni codice prefisso ottimo e tanto meno che se ciò è vero il codice è ottimo!!!! Dice solo che ciò è vero per almeno un codice ottimo.

Sappiamo che in T esistono due foglie sorelle a profondità massima. Siano c e d i caratteri di tali foglie. Mostriamo che scambiando c e d con a e b il codice rimane ottimo. Possiamo supporre f c f d ed f a f b. a e b sono i due caratteri con frequenza minima in assoluto e quindi f a f c ed f b f d.

Sia T' ottenuto da T scambiando la foglia c con la foglia a (con ricalcolo delle frequenze dei nodi interni) f a f c ed f b f d. T T a b c b c d a d

Allora: Siccome T è ottimo B(T) = B(T') e quindi anche T' è ottimo. Scambiando poi le foglie d e b, si ottiene ancora un albero ottimo T'' in cui a e b sono foglie sorelle.

Teorema L algoritmo di Huffman produce un codice prefisso ottimo Huffman(c, f, n) Q = Ø // coda con priorità for i = to n Push(Q, Nodo(f i, c i )) for j = n downto 2 x = ExtractMin(Q) y = ExtractMin(Q) Push(Q, Nodo(x,y)) Conseguenza return ExtractMin(Q) della sottostruttura ottima e della proprietà della scelta golosa

Esercizio 5 Dimostrare che ogni algoritmo di compressione che accorcia qualche sequenza di bit deve per forza allungarne qualche altra.

Dimostrazione Supponiamo per assurdo che l algoritmo accorci qualche sequenza ma non ne allunghi nessuna. Sia x la più corta sequenza che viene accorciata dall algoritmo e sia m la sua lunghezza. Le sequenze di lunghezza minore di m sono 2 m - e non vengono accorciate o allungate.

Ognuna di esse viene codificata con una sequenza diversa e quindi le loro codifiche sono anch esse 2 m - e sono tutte di lunghezza minore di m. Dunque ognuna delle 2 m - sequenze più corte di m è codifica di qualche sequenza più corta di m. Dunque la codifica di x coincide con la codifica di un altra sequenza. ASSURDO!!!!