lucidi a colori - diegm - Università degli Studi di Udine

Fondamenti di Informatica - Tecniche di compressione senza perdita
FONDAMENTI DI INFORMATICA
Prof. PIER LUCA MONTESSORO
Facoltà di Ingegneria
Università degli Studi di Udine
Tecniche di compressione
senza perdita
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
1
Fondamenti di Informatica - Tecniche di compressione senza perdita
Nota di Copyright
Questo insieme di trasparenze (detto nel seguito slide) è protetto dalle leggi sul copyright
e dalle disposizioni dei trattati internazionali. Il titolo ed i copyright relativi alle slides (ivi
inclusi, ma non limitatamente, ogni immagine, fotografia, animazione, video, audio,
musica e testo) sono di proprietà dell’autore prof. Pier Luca Montessoro, Università degli
Studi di Udine.
Le slide possono essere riprodotte ed utilizzate liberamente dagli istituti di ricerca,
scolastici ed universitari afferenti al Ministero della Pubblica Istruzione e al Ministero
dell’Università e Ricerca Scientifica e Tecnologica, per scopi istituzionali, non a fine di
lucro. In tal caso non è richiesta alcuna autorizzazione.
Ogni altro utilizzo o riproduzione (ivi incluse, ma non limitatamente, le riproduzioni su
supporti magnetici, su reti di calcolatori e stampe) in toto o in parte è vietata, se non
esplicitamente autorizzata per iscritto, a priori, da parte dell’autore.
L’informazione contenuta in queste slide è ritenuta essere accurata alla data della
pubblicazione. Essa è fornita per scopi meramente didattici e non per essere utilizzata in
progetti di impianti, prodotti, reti, ecc. In ogni caso essa è soggetta a cambiamenti senza
preavviso. L’autore non assume alcuna responsabilità per il contenuto di queste slide (ivi
incluse, ma non limitatamente, la correttezza, completezza, applicabilità, aggiornamento
dell’informazione).
In ogni caso non può essere dichiarata conformità all’informazione contenuta in queste
slide.
In ogni caso questa nota di copyright e il suo richiamo in calce ad ogni slide non devono
mai essere rimossi e devono essere riportati anche in utilizzi parziali.
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
2
Fondamenti di Informatica - Tecniche di compressione senza perdita
Run Length Encoding
• Comprime sequenze di byte uguali
• Due versioni:
– con uso di carattere riservato
– senza uso di carattere riservato
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
3
Fondamenti di Informatica - Tecniche di compressione senza perdita
Run Length Encoding
• Facendo uso di un carattere riservato si
può sostituire una sequenza di byte
uguali con il carattere riservato seguito
da uno solo dei byte ripetuti più un
contatore del numero di ripetizioni
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
4
Fondamenti di Informatica - Tecniche di compressione senza perdita
Run Length Encoding
ecco ******** 8 asterischi
65 63 63 6F 20 2A 2A 2A 2A 2A 2A 2A 2A 20 38 20 61 73 74 65 72 69 73 63 68 69
codici ASCII
65 63 63 6F 20 1A 2A 8 20 38 20 61 73 74 65 72 69 73 63 68 69
carattere riservato (SUB)
numero di ripetizioni
codice ASCII del carattere da ripetere
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
5
Fondamenti di Informatica - Tecniche di compressione senza perdita
Run Length Encoding
• Senza usare un carattere riservato si
può accorciare una sequenza di byte
uguali interrompendola dopo un numero
predefinito di ripetizioni (es. 3) e
sostituendo ai caratteri rimanenti il
numero che rappresenta la lunghezza
totale della sequenza
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
6
Fondamenti di Informatica - Tecniche di compressione senza perdita
Run Length Encoding
ecco ******** 8 asterischi
65 63 63 6F 20 2A 2A 2A 2A 2A 2A 2A 2A 20 38 20 61 73 74 65 72 69 73 63 68 69
codici ASCII
65 63 63 6F 20 2A 2A 2A 8 20 38 20 61 73 74 65 72 69 73 63 68 69
prima parte della sequenza
lunghezza totale della sequenza
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
7
Fondamenti di Informatica - Tecniche di compressione senza perdita
Run Length Encoding
A VOLTE LA LUNGHEZZA AUMENTA...
ecco *** 3 asterischi
65 63 63 6F 20 2A 2A 2A 20 33 20 61 73 74 65 72 69 73 63 68 69
codici ASCII
65 63 63 6F 20 2A 2A 2A 3 20 33 20 61 73 74 65 72 69 73 63 68 69
prima parte della sequenza
lunghezza totale della sequenza
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
8
Fondamenti di Informatica - Tecniche di compressione senza perdita
Codifica entropica
• Si associano codici binari più corti ai
simboli (elementi di informazione) più
probabili
NOTA: la codifica dell’informazione
vista finora (numeri, testi) è finalizzata
alla semplicità dell’elaborazione, non
alla minimizzazione della lunghezza del
codice
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
9
Fondamenti di Informatica - Tecniche di compressione senza perdita
Definizioni
• Alfabeto A = {α1 ,..., α M }
• Probabilità P = { p1 ,..., pM },
M
∑p
j =1
j
=1
dove p j ≡ P[α j ] ≥ 0
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
10
Fondamenti di Informatica - Tecniche di compressione senza perdita
Definizioni
• Informazione del
simbolo isolato αj
 1 
i(α j ) ≡ log 2  
 pj 
 
• Si definisce entropia della sorgente di
simboli X = {A, P} la sua informazione
media
M
H ( X ) = E[i(α )] = ∑ p j log 2 (1 / p j )
j =1
Proprietà: 0 ≤ H ( X ) ≤ log 2 M
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
11
Fondamenti di Informatica - Tecniche di compressione senza perdita
Codifica entropica
• L’entropia misura l’uniformità (o la non
uniformità) della distribuzione dei
simboli generati dalla sorgente
• È possibile assegnare ai simboli codici
di lunghezza differente
• Esempio: codici a prefisso (nessuna
parola di codice è prefisso ad un’altra
parola di codice)
A → 0, B → 10, C → 100, D → 101
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
12
Fondamenti di Informatica - Tecniche di compressione senza perdita
Codifica entropica
• I codici a prefisso vengono decodificati
mediante alberi binari
• Esempio:
A → 0, B → 10, C → 100, D → 101
0
1
0
A
B
0
1
C
D
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
13
Fondamenti di Informatica - Tecniche di compressione senza perdita
Codifica entropica
• La probabilità di un simbolo può anche
essere funzione del “contesto”, cioè dei
simboli che lo hanno preceduto
• Esempio: nell’alfabeto comune la
probabilità della lettera ‘u’ è quasi 1
dopo una ‘q’
• È possibile introdurre codifiche con
memoria, basate sulla probabilità
condizionata dal contesto
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
14
Fondamenti di Informatica - Tecniche di compressione senza perdita
Codifica di Huffman
• Viene costruito un albero binario in cui
ogni diramazione rappresenta l’aggiunta
un bit a 1 o a 0 della parola di codice
• Il grado di sbilanciamento dell’albero è
funzione della frequenza relativa di
ricorrenza dei dati
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
15
Fondamenti di Informatica - Tecniche di compressione senza perdita
Esempio
Probabilità dell’alfabeto
P={0.25, 0.25, 0.2, 0.15, 0.15}
Entropia
H(X) = 2.2855 bit/simbolo
P=1.0
0
P=0.55
0
α1
1 P=0.3
1
0
α4
α1 → 00
α2 → 10
α3 → 11
α5
1
P=0.45
0
α2
1
α3
α4 → 010
Nota: sono
necessari
arrotondamenti
per ottenere un
numero intero
di bit
α5 → 011
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
16
Fondamenti di Informatica - Tecniche di compressione senza perdita
MNP 5:
codifica adattativa statistica basata
sulla frequenza dei caratteri
• Cambia la codifica binaria di ogni byte
utilizzando un numero di bit minore,
uguale o maggiore a 8 a seconda della
frequenza con cui il carattere compare
• È adattativa perché calcola
dinamicamente la frequenza statistica
dei caratteri durante la compressione
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
17
Fondamenti di Informatica - Tecniche di compressione senza perdita
MNP 5
byte in ingresso
00000000
00000001
00000010
00000011
00000100
00000101
00000110
00000111
00001000
00001001
…
00100000
…
11111100
11111101
11111110
11111111
header
000
000
001
001
010
010
010
010
011
011
…
101
…
111
111
111
111
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
body
0
1
0
1
00
01
10
11
000
001
…
00000
…
1111100
1111101
1111110
11111110
18
Fondamenti di Informatica - Tecniche di compressione senza perdita
MNP5: compressione
00000101
01001
compressione
contatori
A
aggiorna il
contatore
header body
B
restituisce la
nuova codifica
C
se il contatore di un byte indica una frequenza maggiore di
uno a codifica più corta, verranno scambiati con effetto
dalla prossima occorrenza
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
19
Fondamenti di Informatica - Tecniche di compressione senza perdita
MNP5: versione più sofisticata
• Si utilizzano 256 tabelle
• La tabella da usare viene selezionata in
base al carattere precedente
• In questo modo il calcolo della
frequenza statistica è più accurato
• Esempio:
– la lettera ‘u’ dopo una ‘q’ ha probabilità
estremamente elevata, mentre in altri casi
è molto bassa
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
20
Fondamenti di Informatica - Tecniche di compressione senza perdita
Codifica a dizionario
• Idea di base: Ziv-Lemper
• Successivamente modificata da Welch
→ Algoritmo LZW
• Utilizzato in numerosi software comuni
(es. WinZip)
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
21
Fondamenti di Informatica - Tecniche di compressione senza perdita
Codifica a dizionario
• L’idea di base è suddividere i dati di
ingresso in sottosequenze che, se già
incontrate nella sequenza di dati di
ingresso, vengono codificate mediante il
puntatore alla posizione corrispondente
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
22
Fondamenti di Informatica - Tecniche di compressione senza perdita
Algoritmo di Lempel-Ziv-Welch
(LZW)
• Sostituisce stringhe (sequenze) di
caratteri con un singolo codice binario
• I codici hanno lunghezza predefinita
maggiore di 8 bit (es. 12 bit):
– i primi 256 valori sono assegnati ai
caratteri ASCII
– i restanti valori vengono assegnati
dall’algoritmo alle stringhe
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
23
Fondamenti di Informatica - Tecniche di compressione senza perdita
Algoritmo di Lempel-Ziv-Welch
(LZW)
STRING = get input character
WHILE there are still input characters DO
CHARACTER = get input character
IF STRING+CHARACTER is in the string
table then
STRING = STRING+character
ELSE
output the code for STRING
add STRING+CHARACTER to the string
table
STRING = CHARACTER
END of IF
END of WHILE
output the code for STRING
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
24
Fondamenti di Informatica - Tecniche di compressione senza perdita
Algoritmo di Lempel-Ziv-Welch
(LZW)
• L’algoritmo inserisce nuove stringhe
nella tabella fino ad esaurimento dei
valori disponibili per i codici
• Quando la tabella è piena controlla se
l’efficienza diminuisce: in tal caso,
svuota la tabella e ricomincia
• In alternativa si potrebbero eliminare le
stringhe poco usate (complicato da
gestire)
© 2000 Pier Luca Montessoro (si veda la nota di copyright alla slide n. 2)
25