Computazione Compressa: Quando lo Spazio non Basta Introduzione La compressione lossless di dati è il procedimento attraverso il quale riduciamo di dimensione un file in modo reversibile. Supponiamo ora di voler cercare una parola in un file di testo. Per risolvere rapidamente il problema abbiamo bisogno di un indice, ossia di un metodo di organizzazione dei dati in memoria che faciliti le ricerche. Tutti noi conosciamo almeno un esempio (cartaceo) di indice: richiede meno tempo ricercare la parola “abisso” nella Divina Commedia o in un dizionario? (… e perché?) Recentemente è stato provato che compressione e indicizzazione sono due facce della stessa medaglia. Possiamo costruire indici compressi, ossia organizzare i nostri dati in memoria in una forma compressa che permette la ricerca rapida di parole! impiegate includono: fattorizzazione Lempel-Ziv, trasformata di Burrows-Wheeler e codifiche ad entropia. Risultati I nostri algoritmi e strutture dati sono stati implementati in C++ e sono scaricabili qui: https://github.com/nicolaprezza. Su collezioni ripetitive di dati, alcune delle nostre tecniche di compressione utilizzano fino a 600 volte meno spazio in RAM rispetto ad algoritmi classici (vedi grafico). Questa efficienza è però pagata in termini di tempo di esecuzione. Analogamente, il nostro indice compresso [1] può essere costruito usando una quantità compressa di RAM, e su alcuni insiemi di dati è decine di volte più veloce di moderni indici descritti in letteratura in grado di raggiungere gli stessi tassi di compressione. Motivazioni Allo stato dell'arte, algoritmi classici per comprimere dati e per costruire indici compressi (esempi: [5,6]) richiedono, durante l'esecuzione, una quantità di memoria RAM maggiore della dimensione del file in input. Nessuno ci dice però che copiare interamente il file originale in RAM sia necessario per risolvere il problema. Sorge quindi una domanda: possiamo comprimere ed indicizzare file usando una quantità di RAM paragonabile alla dimensione del testo compresso? Un tale risultato troverebbe importanti applicazioni in bioinformatica, dove sempre più frequentemente viene richiesto di manipolare file contenenti centinaia di genomi provenienti dalla stessa specie (e quindi simili tra di loro a più del 99.5%). Lavoro di Ricerca Il mio lavoro di ricerca mira a raggiungere questo obiettivo tramite l'utilizzo di strutture dati compresse. Una struttura dati è un metodo di organizzazione dei dati in memoria che accelera l'esecuzione di certe operazioni su di essi (es: contare il numero di lettere 'a' in un file). In collaborazione con gruppi di ricerca all'università di Udine e di Helsinki, ho sviluppato un indice [1] e diversi algoritmi di compressione [2-4] che usano spazio compresso in RAM durante l'esecuzione. Le tecniche dott. Nicola Prezza Prof. Alberto Policriti Info: Tel. +39 0432 558411 [email protected] Risultati in termini di risorse impiegate (spazio in RAM e tempo) da 5 algoritmi di compressione su 3 file: tutte le versioni della pagina Wikipedia su Albert Einstein, 37 varianti del genoma di Saccharomyces cerevisiae (lievito della birra) e un file XML contenente informazioni bibliografiche di riviste scientifiche. Linee orizzontali: spazio dei file su disco. Nota: le scale sono logaritmiche, quindi una differenza di 1 unità corrisponde ad un fattore moltiplicativo pari a 10. Esempio: l'algoritmo [2] occupa circa 600 volte meno spazio di [5] sul dataset “Wiki Albert Einstein”. Riferimenti bibliografici [1] Belazzougui D, Cunial F, Gagie T, Prezza N, Raffinot M. Composite Repetition-Aware Data Structures. Combinatorial Pattern Matching 2015 Jun 29 (pp. 26-39). Springer International Publishing. [2] Policriti A, Prezza N. Computing LZ77 in Run-Compressed Space. Data Compression Conference 2016 Mar 29. IEEE Conference Publishing Services. [3] Policriti A, Prezza N. Fast Online Lempel-Ziv Factorization in Compressed Space. String Processing and Information Retrieval 2015 Sep 1 (pp. 13-20). Springer International Publishing. [4] Policriti A, Gigante N, Prezza N. Average Linear Time and Compressed Space Construction of the BurrowsWheeler Transform. Language and Automata Theory and Applications 2015 Mar 2 (pp. 587-598). [5] Beller T, Zwerger M, Gog S, Ohlebusch E. Space-efficient construction of the Burrows-Wheeler transform. String Processing and Information Retrieval 2013 Oct 7. Springer International Publishing. [6] Juha Kärkkäinen, Dominik Kempa, Simon J. Puglisi. Lightweight Lempel-Ziv Parsing. In Proc. 12th Symposium on Experimental Algorithms (SEA 2013), Springer, 2013, pp. 139-150. AREA TECNICO SCIENTIFICA 29° ciclo Corso di dottorato in Informatica e Scienze Matematiche e Fisiche