UNA STRUTTURA D’INDICIZZAZIONE DATI EFFICIENTE ED ELEGANTE BASI TEORICHE PER ALBERO DEI SUFFISSI
Contenuti <ul><li>Definizione di albero di suffissi </li></ul><ul><li>Tecniche per costruire un albero dei suffissi </li><...
Definizione: teorica <ul><li>Un albero dei suffissi  è una struttura dati che -per sua natura- evidenzia la struttura di u...
Definizione: pratica <ul><li>Un  albero dei suffissi  per una stringa di caratteri S di  m  elementi, è un albero direzion...
Storia <ul><li>Il primo algoritmo per la costruzione di alberi dei suffissi in tempi lineari è stato sviluppato da Weiner ...
Albero implicito di una stringa <ul><li>un  albero implicito di una stringa S  come   un albero ottenuto dall’albero di S$...
Algoritmo di costruzione di Ukkonen (1/2)  <ul><li>Ukkonen definì un algoritmo in grado di costruire una sequenza di alber...
Algoritmo di costruzione di Ukkonen (2/2)
Tecniche di riduzione del tempo <ul><li>Il primo trick è il concetto di  Suffix link . Per un nodo v con label generica x-...
Albero Generalizzato <ul><li>l’albero generalizzato  viene utilizzato quando occorre fare operazioni su più di una singola...
Applicazioni dell’albero dei suffissi <ul><li>La forma molto strutturata dell’albero dei suffissi permette di implementare...
1. Pattern matching (exact string matching) <ul><li>Gli alberi dei suffissi permettono l’individuazione di un pattern di l...
2.  La più lunga sottostringa comune <ul><li>Questo problema può essere risolto, attraverso un albero dei suffissi general...
3. Sottostringhe comuni per più di due stringhe <ul><li>Estensione concettuale della ricerca della più lunga sottostringa ...
4.  Problema dell’accavallamento ( prefisso-suffisso comune) <ul><li>Si tratta di distinguere la più lunga parte comune di...
Upcoming SlideShare
Loading in …5
×

introduzione all'abero dei suffissi

2,082 views

Published on

Descrizione della teoria degli alberi di suffissi.Come Costruirli, e applicazioni standard.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
2,082
On SlideShare
0
From Embeds
0
Number of Embeds
89
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

introduzione all'abero dei suffissi

  1. 1. UNA STRUTTURA D’INDICIZZAZIONE DATI EFFICIENTE ED ELEGANTE BASI TEORICHE PER ALBERO DEI SUFFISSI
  2. 2. Contenuti <ul><li>Definizione di albero di suffissi </li></ul><ul><li>Tecniche per costruire un albero dei suffissi </li></ul><ul><li>Vantaggi e Svantaggi </li></ul><ul><li>Applicazioni generiche </li></ul>
  3. 3. Definizione: teorica <ul><li>Un albero dei suffissi è una struttura dati che -per sua natura- evidenzia la struttura di una stringa di caratteri, dandone una rappresentazione interna, mediante i suoi suffissi. </li></ul><ul><li>La sua definizione ne caratterizza le parti da cui è composto </li></ul>
  4. 4. Definizione: pratica <ul><li>Un albero dei suffissi per una stringa di caratteri S di m elementi, è un albero direzionato con esattamente m foglie numerate da 1 ad m, che rappresentano la posizione iniziale del suffisso che termina su quella determinata foglia. </li></ul><ul><li>Ogni nodo interno ha almeno due figli, e ogni arco è etichettato con una sottostringa non vuota di S </li></ul><ul><li>La concatenazione delle labels degli archi percorsi dalla radice fino alla foglia determinano l’esatto suffisso che comincia dalla posizione indicata dalla foglia stessa </li></ul>
  5. 5. Storia <ul><li>Il primo algoritmo per la costruzione di alberi dei suffissi in tempi lineari è stato sviluppato da Weiner nel 1973. </li></ul><ul><li>Un più efficente algoritmo per la la riduzione dello spazio necessario è stato introdotto da McCreight nel 1976. </li></ul><ul><li>Ukkonen (1995) produsse una variante “on-line” di McCreight che semplifica molto la procedura, sebbene sia intrinsecamente meno efficiente. </li></ul>
  6. 6. Albero implicito di una stringa <ul><li>un albero implicito di una stringa S come un albero ottenuto dall’albero di S$ ma rimuovendo ogni coppia del simbolo terminale, e rimuovendo ogni nodo che non ha almeno due figli </li></ul>
  7. 7. Algoritmo di costruzione di Ukkonen (1/2) <ul><li>Ukkonen definì un algoritmo in grado di costruire una sequenza di alberi impliciti, uno per ogni prefisso s[1…i]. Incrementando di passo in passo l’albero implicito (per i che va da 1 ad m ) si riesce a costruire l’albero dei suffissi della stringa S di lunghezza m . Il tempo per costruire tale albero è pari a O(m^2) . </li></ul><ul><ul><li>L’algoritmo inizia con un albero implicito contenente il primo carattere della stringa. Quindi gli step successivi constano in aggiunte successive di caratteri finchè l’albero non è completo. </li></ul></ul><ul><ul><li>Ad ogni passo dell’estensione dei rami dell’albero vengono seguite 3 regole: </li></ul></ul><ul><ul><li>Se non esiste un arco che comincia con il prefisso che voglio collocare creo un nuovo arco a partire dalla radice </li></ul></ul><ul><ul><li>Se esiste già una foglia, aggiorno l’arco aggiungendo alla fine dell’etichetta corrispondente il carattere nuovo </li></ul></ul><ul><ul><li>Se c’è già non faccio nulla (non inserisco archi terminali $). </li></ul></ul>
  8. 8. Algoritmo di costruzione di Ukkonen (2/2)
  9. 9. Tecniche di riduzione del tempo <ul><li>Il primo trick è il concetto di Suffix link . Per un nodo v con label generica x- alfa , se esiste un altro nodo s(v) con label uguale ad alfa, allora posso creare un link tra v e s(v), una sorta di puntatore, o percorso alternativo che mi permette di passare direttamente da un nodo all’altro. </li></ul><ul><li>Il secondo concetto per migliorare i tempi di calcolo è lo Skip/count . Si basa sul concetto di profondità dei nodi. </li></ul>Sfruttando questi accorgimenti è possibile ridurre il tempo di costruzione dell’albero, il tempo di percorrenza e lo spazio necessario a O(m).
  10. 10. Albero Generalizzato <ul><li>l’albero generalizzato viene utilizzato quando occorre fare operazioni su più di una singola stringa. </li></ul><ul><li>Ogni foglia rappresenta sia un suffisso di una delle due stringhe, sia un suffisso che occorre in entrambe le stringhe. Ogni nodo interno v è marcato con 1 (o 2) dipendentemente se esiste una foglia nel sotto albero di v che rappresenta la stringa S1 (o S2). </li></ul><ul><li>Un albero generalizzato può essere costruito in un tempo O(m1+m2) dove m1 e m2 sono la lunghezza delle due stringhe </li></ul>
  11. 11. Applicazioni dell’albero dei suffissi <ul><li>La forma molto strutturata dell’albero dei suffissi permette di implementare in modo semplice e computazionalmente veloce, molte applicazioni specifiche sulla base dell’osservazione della struttura ripetitiva del modello stesso. </li></ul><ul><li>Foglie e nodi interni, insieme ai vari puntatori che posso associare ad essi, possono assumere significati diversi, appropriati all’applicazione che voglio implementare. </li></ul>
  12. 12. 1. Pattern matching (exact string matching) <ul><li>Gli alberi dei suffissi permettono l’individuazione di un pattern di lunghezza n in un tempo O(n+k), dove k è il numero di occorrenze del pattern nel data set. </li></ul><ul><li>Il problema dell’ Exact Set Matching: Questo problema comporta la ricerca di tutti i match esatti per un set di stringhe. </li></ul><ul><ul><li>Il tempo di risoluzione con l’albero dei suffissi è ancora una volta in O(n + k), dove n è la lunghezza totale del set di patterns </li></ul></ul><ul><li>Il procedimento: </li></ul><ul><ul><li>si segue, a partire dalla radice, l’arco etichettato con i caratteri del pattern cercato, </li></ul></ul><ul><ul><li>ci si ferma o quando arrivo in fondo al pattern e si osserva la foglia finale </li></ul></ul><ul><ul><li>o quando si trova un mis-match sull’arco (nel qual caso il pattern non è presente tra i dati). </li></ul></ul><ul><li>Il cammino percorso durante la ricerca è unico. </li></ul>
  13. 13. 2. La più lunga sottostringa comune <ul><li>Questo problema può essere risolto, attraverso un albero dei suffissi generalizzato di dimensione m, in un tempo O(m) . Per farlo è richiesto sfruttare due valori associati ad ogni nodo interno: </li></ul><ul><ul><li>  String coverage c(v) – il numero di stringhe distinte sottese dai suffissi nei figli di v. </li></ul></ul><ul><ul><li>string-depth d(v) – il numero di caratteri che costituiscono l’etichetta suffisso per il nodo v. </li></ul></ul>La più lunga sottostringa comune è identificata dal nodo interno marcato da tutte le stringhe, e con la maggiore profondità di stringa.
  14. 14. 3. Sottostringhe comuni per più di due stringhe <ul><li>Estensione concettuale della ricerca della più lunga sottostringa comune. Al posto di calcolare singolarmente i coverage string per ogni nodo si genera una lista delle profondità di stringa e una lista di stringhe uniche </li></ul>Ogni nodo ha sotteso più di un finale di stringa. Per esempio il nodo 8 indica che le stringhe 1, 2, 3 e 4 hanno una comune sottostringa di lunghezza 8
  15. 15. 4. Problema dell’accavallamento ( prefisso-suffisso comune) <ul><li>Si tratta di distinguere la più lunga parte comune di stringa in un set di stringhe, nell’ipotesi che nessuna stringa sia sottostringa di un’altra . </li></ul><ul><li>La risoluzione di questo problema si riduce alla determinazione del prefisso non comune all’altra stringa. </li></ul><ul><li>Per esempio, date due sequenze S1=ABACD e S2=acdef </li></ul><ul><li>A B A C D </li></ul><ul><li> a c d e f </li></ul><ul><li>  </li></ul><ul><li>La componente comune è “acd” e il prefisso non comune è “AB”. </li></ul><ul><li>Per individuarlo si ricorre alla ricerca di un arco terminale ( ovvero un arco dell’albero etichettato dal solo terminatore di stringa $). </li></ul><ul><li>La presenza di un arco terminale indica che l’arco che lo precede sul cammino sarà un suffisso finale, ma al contempo esso rappresenterà un prefisso per l’altro cammino che parte da quel nodo. </li></ul>

×