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