Codifica Varint
Codifiche per gli indici
Giambattista Amati
Università di Tor Vergata, Roma
marzo 2015
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Sommario
1
Ancora sulla rappresentazione codificata del testo: la
codifica ottimale
2
Huffman code
3
γ code
4
Codifica Varint
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Metodi di compressione
I metodi di compressione si suddividono in diverse
categorie:
Per simboli (costitutivi delle parole), buona compressione
ma non adatti alle funzioni di recupero dell’informazione
Per parole
Per dizionario (sottostringhe, LZ77 -Ziv & Lempel, gzip)
statici (le probabilità vengono stabilite inizialmente)
semi-statici (le probabilità dipendono dal testo in esame)
adattivi (le probabilità si modificano dinamicamente in
base al testo già esaminato)
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Definizione di codifica
Codifica dell’informazione. D è una funzione di decodifica
D : {0, 1}∗ → N , una funzione parziale tra sequenze
binarie (parole codificate) e una insieme di messaggi N
(parole del sorgente). D −1 = E : N → {0, 1}∗ si dice
funzione di codifica delle parole sorgenti.
E(∅) = ∅
E(xy ) = E(x)E(y )
E si dice prefix-free se per ogni x1 ∈ N , E(x1 ) non è il
prefisso di nessun E(x2 ), x2 ∈ N
Esempio. La codifica di Shannon-Fano è libera da prefissi.
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Quale codifica scegliere
Velocità del sistema nel codificare (batch), o recuperare e
decodificare (on-line) l’informazione.
Il numero di accessi al disco è il costo determinante nel
tempo di ricerca.
Memoria occupata dalle strutture, tempo di ricerca.
Tasso di compressione del modello di codifica (rapporto
medio tra il numero l(E(x)) di bits necessari a codificare
l’informazione e la lunghezzaPl(x) in bits dell’informazione
x∈N p(x)l(E(x))
non compressa x di N , cioè P
p(x)l(x) )
x∈N
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Teorema del codice ottimale
P
Sia L(E) = x∈N p(x)l(E(x)) la lunghezza media della
codifica e
L = min{L(E) : E è una codifica libera da prefisso}.
H ≤L<H +1
dove H è l’entropia della distribuzione p. La codifica
migliore ha dunque l’entropia H come estremo inferiore.
Shannon-Fano La codifica di Shannon-Fano è vicina a
quella ottimale per tasso di compressione:
− log2 pi ≤ ki = l(E(xi )) < 1 − log2 pi
X
X
H=−
pi log2 pi ≤
pi l(E(xi )) <
i
<
Giambattista Amati
Lezione 3
i
X
i
pi −
X
i
pi log2 pi = 1 + H
Università di Tor Vergata
Codifica Varint
Possiamo usare Shannon-Fano?
No. È troppo costoso decodificarlo (troppi accessi alla struttura
dati). Dobbiamo tenere tutte le probabilità Pi cumulate
approssimate fino alla posizione ki in una struttura dati.
1. Occorre una ricerca binaria del primo bit nella tabella
delle probabilità cumulate, se coincide con una probabilità
cumulata si prosegue con la prossima decodifica, altrimenti
2. Occorre proseguire con i bits successivi fino a trovare
una probabilità cumulata esatta.
Per ogni parola, nel caso peggiore, dobbiamo fare ki log |N |
ricerche nella tabella. Rinunciamo all’alta comprimibilità del
metodo in favore di una maggiore efficienza nella decodifica.
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Costruiamo un albero dove tutti le parole sorgenti x ∈ N di
probabilità p(x) sono disposte sulle foglie.
Ripetere per N − 1 volte:
1
Scegliere due nodi che abbiano la probabilità minore, e
generare un nodo-padre che abbia la somma delle
probabilità.
2
Assegnare 0 al primo nodo figlio e 1 al secondo nodo
figlio.
Terminato l’albero la sequenza generata percorrendo l’albero
dalla radice alla foglia fornisce la codifica degli x ∈ N .
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Come usare la codifica di Huffman
Raffinare l’algoritmo per eliminare il non-determinismo per
la scelta di nodi equiprobabili e per una costruzione
bilanciata dell’albero. (Sappiamo che circa il 50% delle
parole occorrono una volta soltanto e dunque queste
parole hanno tutte probabilità uguali).
La visita di un albero ha bisogno di seguire un puntatore e
tanta memoria. Difficile e costoso da implementare.
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Il γ-code
Una codifica unaria di un numero intero x è 11 . . . 10, ovvero la
sequenza di lunghezza x + 1 con x volte 1 seguiti dallo 0.
Sia n un intero qualunque (ad esempio 1 ≤ n ≤ N ).
1
2
3
Prefisso Rappresentazione unaria di blog2 nc .
Resto n − 2blog2 nc in binario (blog2 nc bits, dove bc
denota la funzione parte intera).
Giustapposizione di prefisso e resto n è dato dal
prefisso blog2 nc in forma unaria seguita dalla
rapresentazione binaria di n − 2blog2 nc.
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Il γ-code
Ad esempio se n = 14, allora blog2 14c = 3 e
14 − 2blog2 14c = 14 − 23 = 6.
Si sviluppi in binario n − 2blog2 nc mediante blog2 nc bits. Lo
sviluppo di 6 con 3 bits è 110
n è dato dal prefisso blog2 nc in forma unaria seguita dalla
rapresentazione binaria di n − 2blog2 nc.
14 si rappresenterà con la sequenza 1110110
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
γ-code
Intero
1
2
3
4
5
6
7
Unario(prefisso)
0
10
10
110
110
110
110
Binario (resto)
0
1
00
01
10
11
γcode
0
100
101
11000
11001
11010
11011
..
.
16
135
Giambattista Amati
Lezione 3
11110
000
111100000
11111110
..
.
0000111
111111100000111
Università di Tor Vergata
Codifica Varint
Proprietà della codifica γ
La lunghezza della codifica γ di n in bits è data dalla
somma blog2 nc + 1 (per il prefisso) con blog2 nc (per il
resto), cioè 2blog2 nc + 1.
Semplicità della codifica . Non occorre codificare le
probabilità degli eventi ma semplicemente codificare
l’ordine degli eventi x ∈ N ottenuto secondo la loro
frequenza decrescente.
Effettività . Non occorre avere una tavola in memoria con
i codici sorgente per cercare e decodificare una sequenza
di bits.
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Codifica a Byte allineato e a lunghezza variabile
CodificaVarint
7 bits per byte con bit di proseguimento (1 byte in più o no)
La decodifica richiede molte operazioni ramificazioni,
shifts & masks
2 bit di proseguimento(2 byte in più o no da leggere)
Giambattista Amati
Lezione 3
Università di Tor Vergata
Codifica Varint
Codifica a Byte allineato e a lunghezza variabile
Idea: codifica a gruppi di 4 valori con 5-17 bytes
Ogni valore ha da 1 a 4 bytes
1 byte di proseguimento (per 4 gruppi) (Mettere 4 valori a
2-bit in un unico byte iniziale)
La decodifica richiede meno operazioni di ramificazioni,
shifts & masks
Decodifica: Il byte prefisso è usato per accedere a una
tavola di 256 valori:
Offsets: +1,+2,+3,+5;
Masks: ff (255 esadecimale,8 bit), ff , ffff (16 bit), ffffff (24
bit)
Giambattista Amati
Lezione 3
Università di Tor Vergata