TRIE (albero digitale di ricerca)

Documenti analoghi
Suffix Tree & Suffix Array

Alberi binari e alberi binari di ricerca

INDICI PER FILE. Accesso secondario. Strutture ausiliarie di accesso

Note per la Lezione 4 Ugo Vaccaro

LE STRUTTURE DATI DINAMICHE: GLI ALBERI. Cosimo Laneve

Alberi binari di ricerca

FILE E INDICI Architettura DBMS

Un esempio: l ADT Dizionario (mutabile) Definizione. Alberi binari di ricerca (BST = binary search tree) search(chiave k) -> elem

ADT Dizionario. Ordered search table. Supponiamo che sia definita una relazione d'ordine totale sulle chiavi del dizionario D:

Indici multilivello dinamici (B-alberi e B + -alberi) Alberi di ricerca - 1. Un esempio. Alberi di ricerca - 3. Alberi di ricerca - 2

Alberi ed Alberi Binari

Alberi. Definizioni principali

Algoritmi e Strutture Dati

Alberi Binari di Ricerca

Programmazione Funzionale

Grammatiche. Grammatiche libere da contesto Grammatiche regolari Potenza delle grammatiche libere e regolari Struttura di frase: Alberi di derivazione

Algoritmi e Principi dell'informatica Seconda Prova in Itinere - 14 Febbraio 2014

Algoritmi e Strutture Dati. HeapSort

Pumping lemma per i linguaggi Context-free

Alberi e alberi binari I Un albero è un caso particolare di grafo

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

Esercitazione 6. Alberi binari di ricerca

Alberi. Gli alberi sono una generalizzazione delle liste che consente di modellare delle strutture gerarchiche come questa: Largo. Fosco.

Heap e code di priorità

Algoritmi e Strutture Dati 2/ed Quiz a risposta multipla

Progettazione di Algoritmi

Esercizi di Algoritmi e Strutture Dati

Problemi, istanze, soluzioni

Esercizi di Algoritmi e Strutture Dati

Progettazione di Algoritmi

I S T I T U T O T E C N I C O I N D U S T R I A L E S T A T A L E

Algoritmi e Strutture dati a.a. 2012/2013

Alberi binari. Ilaria Castelli A.A. 2009/2010. Università degli Studi di Siena Dipartimento di Ingegneria dell Informazione

Esercizi Capitolo 6 - Alberi binari di ricerca

ALBERI : introduzione SOMMARIO ALBERI ALBERI. ALBERI: introduzione ALBERI BINARI: introduzione VISITE RICORSIVE DI ALBERI

Linguaggi e Grammatiche Liberi da Contesto

alberi binari di ricerca (BST)

Algoritmi e Strutture Dati

Union-find. Insiemi disgiunti. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

Corso di elettrotecnica Materiale didattico: i grafi

La codifica di sorgente

1.2d: La codifica Digitale dei caratteri

Per semplicità eliminiamo le ripetizioni nell'albero.

ORDINE DI INSERIMENTO DELLE CHIAVI <35 >35

Strutture di accesso ai dati: B + -tree

Basi di Dati e Sistemi Informativi. Organizzazione fisica dei dati. Corso di Laurea in Ing. Informatica Ing. Gestionale Magistrale

Tracce. 1. Data una lista di elementi di tipo intero, implementare in C++ le seguenti funzioni

Esercitazioni di Algoritmi e Strutture Dati

Alberi di ricerca binari

Esercitazione. Ricorsione. May 31, Esercizi presi dal libro di Rosen

ADT Coda con priorità

Algoritmi e Strutture Dati

Teoria dell informazione

Alberi Bilanciati di Ricerca

Informatica Generale Homework di Recupero 2016

Algoritmi e Strutture di Dati I 1. Algoritmi e Strutture di Dati I Massimo Franceschet francesc

Esercizi Capitolo 10 - Code con priorità e insiemi disgiunti

lezione 9 min-heap binario Heap e Alberi posizionali generali

Esercizi proposti 10

Dati e Algoritmi I (Pietracaprina) Esercizi sugli Alberi

UNIVERSITA DEGLI STUDI DI PERUGIA

Algoritmo basato su cancellazione di cicli

Laboratorio di Algoritmi e Strutture Dati. Aniello Murano. people.na.infn.it/~murano/ Murano Aniello - Lab. di ASD Terza Lezione

Minimo albero di copertura

Linguaggi di Programmazione Corso C. Parte n.3 Linguaggi Liberi da Contesto e Linguaggi Contestuali. Nicola Fanizzi

Codifica di Huffman e Lempel-Ziv-Welch A L B E R T O B E L U S S I A N N O A C C A D E M I C O /

Laboratorio di Algoritmi e Strutture Dati II Semestre 2005/2006. Riassunto sui dizionari

Dizionario. Marina Zanella Algoritmi e strutture dati Tabelle hash 1

Automi Automi finiti: macchine a stati su sistemi di transizioni finiti Modellare con TS e specificare con automi: si usa lo stesso tipo di

alberi binari e ricorsione

Introduzione agli Algoritmi ed alle Strutture Dati Anno Accademico 2015/2016 Appello 23/6/2016

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi e strutture dati

Massimo Benerecetti Tabelle Hash: gestione delle collisioni

Algoritmi e Strutture Dati

Introduzione alla codifica entropica

Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione

Ingegneria degli Algoritmi (II parte pratica)

GRAFI. fig.1 - GRAFI (1) Si avvisa il lettore che certe definizioni che verranno date differiscono da quelle presenti in letteratura.

Laboratorio di Algoritmi e Strutture Dati

Grafi: visite. Una breve presentazione. F. Damiani - Alg. & Lab. 04/05 (da C. Demetrescu et al - McGraw-Hill)

Il tipo astratto coda con priorità: specifiche sintattiche e semantiche. Realizzazioni.

Università degli Studi di Padova. Dipartimento di Ingegneria dell Informazione. Corso di Laurea Triennale in Ingegneria Informatica

Esempio: rappresentare gli insiemi

ALBERI DI RICERCA BINARI (O ALBERI BINARI DI RICERCA)

Indice. Prefazione. 3 Oggetti e Java 53

alberi tipo astratto, implementazione, algoritmi

Strutture dati e loro organizzazione. Gabriella Trucco

Alberto Montresor Università di Trento

Fasi di un Compilatore

Algoritmi e Strutture Dati

ADT Dizionario. Come nella Mappa: Diversamente dalla Mappa:

Grafi pesati Minimo albero ricoprente

Parser Bottom UP. Giuseppe Morelli

Fondamenti di Informatica. Algoritmi di Ricerca e di Ordinamento

Indici ad albero. Albero Binario di Ricerca

Descrizione delle operazioni di calcolo. Espressioni costanti semplici

Tempo e spazio di calcolo (continua)

Algoritmi e strutture di dati 2

Figura 1: 1) Si scriva la formulazione del problema come problema di PLI (con un numero minimo di vincoli) e la matrice dei vincoli.

Transcript:

TRIE (albero digitale di ricerca) Struttura dati impiegata per memorizzare un insieme S di n stringhe (il vocabolario V). Tabelle hash le operazioni di dizionario hanno costo O(m) al caso medio per una stringa di m caratteri AVL costo O(m log n) TRIE O(log n): numero dei confronti O(m): costo dei confronti costo O(m) TRIE: dizionario di stringhe I TRIE permettono di:!verificare se una stringa P appare in S!trovare il più lungo prefisso di P che appare come prefisso di una delle stringhe in S Prefisso i di una stringa P, P = m: P[0, i] 0! i! m-1

TRIE: dizionario di stringhe Definizione ricorsiva di TRIE per un insieme S di stringhe TRIE(S) è un albero cardinale!-ario, dove! = numero di simboli dell alfabeto " = {0, 1,...,!} delle stringhe in S: S è vuoto! TRIE(S) è NULL S non è vuoto! crea radice r e per ogni c # "$!S c = {stringhe in S che iniziano con il simbolo c}!rimuovi il simbolo iniziale c dalle stringhe in S c (se % vuoto)!poni ricorsivamente r.figlio[c] = TRIE(S c )

TRIE Ciascun nodo u in TRIE(S) contiene un campo u.dato per memorizzare un elemento del dizionario Ogni stringa in S corrisponde a un nodo u, ed è memorizzata in u.dato.chiave Usando un terminatore di fine stringa per ciascuna stringa è possibile associare in modo univoco le stringhe alle foglie del trie (non è necessario se nessuna stringa è prefisso di un altra). I nodi interni rappresentano prefissi. Altezza: lunghezza massima delle stringhe. Dimensione: al più N+1 N= lunghezza totale delle n stringhe la dimensione massima si raggiunge se tutte le stringhe hanno carattere iniziale diverso Ricerca in un trie Stringa pattern P di ricerca con m simboli, in O(m) tempo indipendentemente da S Il tempo di ricerca è O(p+1), dove p! m è la lunghezza del prefisso trovato

Ricerca per prefissi Identifica il nodo u che corrisponde al più lungo prefisso di P che appare nel trie. Tutte le stringhe in S che hanno il prefisso corrispondente a u possono essere recuperate con una semplice visita (numstringhe è una variabile globale).

Inserimento Si cerca nel trie il prefisso x più lungo della stringa P da inserire, che occorre in un nodo u del trie; Si scompone P come xy:!se y non è vuoto, si sostituisce il sottoalbero vuoto raggiunto con la ricerca di x, mettendo al suo posto il trie per y;!altrimenti si associa P al nodo u identificato. Il costo è O(m). Non occorrono operazioni di ribilanciamento, infatti la forma del trie è determinata univocamente dalle stringhe in esso contenute. Applicazione: ordinamento di stringhe in tempo lineare Il trie mantine l ordinamento lessicografico. Si effettua, con la funzione Recupera, una visita simmetrica del trie costruito con l inserimento iterativo delle stringhe contenute nell array S. Costo: O(N), se N è la somma delle n stringhe in S

Trie compatto Ha solo O( S ) nodi (al più n nodi interni e n foglie). Non esistono nodi (eccetto la radice) con un solo figlio Archi etichettati con descrittori di sottostringhe: (stringa, inizio, fine) Applicazioni: albero dei suffissi (suffix tree) Più potente delle liste invertite: consente la ricerca anche in testi che non possono essere partizionati in termini (es. sequenze biologiche, testi cinesi, ecc.) Trie compatto dove S = { suffissi T[i,n] di T} Esempio: T = banana$ banana$ [0]!! anana$ [1]!! nana$ [2]!! ana$ [3]!! na$ [4]!! a$ [5]!! $ [6]!

Applicazioni: albero dei suffissi (suffix tree) Non è necessario dividere un testo in termini: ogni segmento è un potenziale termine. O(n 2 ) termini, ma spazio O(n). Usando il vocabolario V delle liste invertite per memorizzare questi termini si avrebbe spazio quadratico o superiore. E possibile costruire l albero dei suffissi in O(n) tempo. Albero dei suffissi Proprietà utilizzata dalla ricerca: P = T[i, i+ P -1] sse P è prefisso del suffisso T[i,n] Una volta individuato il nodo u che corrisponde a P, le foglie i discendenti da u corrispondono esattamente alle posizioni i del testo in cui P occorre. 1.! Effettua una ricerca per prefissi di P 2.! Se P appare interamente in un cammino che dalla radice termina in u, recupera i suffissi T[i,n] nel sottoalbero di u. 3.! Per ogni suffisso T[i,n] così recuperato, restituisci la posizione i come occorrenza

Albero dei suffissi Esempio: ricerca di P = ana conduce al nodo le cui foglie discendenti sono i = 1 e i = 3, che sono anche le occorrenze di P T = banana$! 0 1 2 3 4 5 6! Albero dei suffissi Il problema di cercare P in un testo T si riduce al problema di cercare P nel trie compatto. Il costo della ricerca è indipendente dalla lunghezza del testo L algoritmo è output-sensitive: tempo O( P + occ) Volendo usare l albero per una collezione di documenti D = {T 0, T 1,, T s-1 }, basta costruirlo sul testo T = T 0 $T 1 $...$T s-1 $ ottenuto concatenando i testi in D separati dal simbolo speciale $.

FINE Lucidi tratti da Crescenzi Gambosi Grossi, Strutture di dati e algoritmi Progettazione, analisi e visualizzazione Addison-Wesley, 2006 http://algoritmica.org