Corrispondenza fra stringhe

Slides:



Advertisements
Presentazioni simili
Prof.ssa Rossella Petreschi Lezione del 7 /01/ 2013 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 32 del testo Cormen,Leiserson,Rivest,
Advertisements

Prof.ssa Rossella Petreschi Lezione del 29/10/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 19 del testo Cormen, Leiserson, Rivest,
2a + 10b abx2 3a + 1 y 2 a + 1 x + 2y a − Espressioni algebriche
Prof.ssa Rossella Petreschi Lezione del 5/12/2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 11 del testo Anany Levitin “The design.
Prof.ssa Rossella Petreschi Lezione del 3/12/2013 del Corso di Algoritmica GRAFI e PLANARITA’ Lezione n°15.
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi Somme prefisse Lezione n°2.
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Unità di apprendimento 1
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Branch and Bound Lezione n°14 Prof.ssa Rossella Petreschi
Progettare algoritmi veloci usando strutture dati efficienti
Alberi di ricerca di altezza logaritmica
Analisi di sequenze di operazioni Union-Find
Stringhe e spostamenti
Algoritmi Avanzati a.a.2014/2015 Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
IL CONCETTO DI ALGORITMO
B-alberi e alberi autoaggiustanti
Lezione n°14 Reti di flusso Prof.ssa Rossella Petreschi
La gestione degli insiemi disgiunti
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Sulla complessità Lezione n°2
Usi (meno scontati) della visita DFS
Lezione n°4 Prof.ssa Rossella Petreschi
Paths, tree and flowers Lezione n°14
Lezione n°11 Prof.ssa Rossella Petreschi
Lezione n°12 Prof.ssa Rossella Petreschi
Codicfiche Interi Complemento alla base.
ABBINAMENTO Lezione n°13
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Algoritmi per il flusso nelle reti
Algoritmi per il flusso nelle reti
Lezione n°6 Prof.ssa Rossella Petreschi
Ordinamento in tempo lineare
Ricorsione 16/01/2019 package.
Gestione dinamica di tabelle
Schema generale, visita in ampiezza e profondità.
Algoritmi e Strutture Dati
Backtracking Lezione n°13 Prof.ssa Rossella Petreschi
Corso di Laurea Ingegneria Informatica Fondamenti di Informatica
Progettare algoritmi veloci usando strutture dati efficienti
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Automi e stringhe Lezione n°24 Prof.ssa Rossella Petreschi
Le Macchine di Turing.
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
APPUNTI SUL LINGUAGGIO C Esercizi sugli array e strutture
Algoritmi e Strutture Dati
Backtracking Lezione n°17 Prof.ssa Rossella Petreschi
Corso di Algoritmi e Strutture Dati APPUNTI SUL LINGUAGGIO C
Esercizio Dato un albero binario, definiamo altezza minimale di un nodo v la minima distanza di v da una delle foglie del suo sottoalbero, definiamo invece.
Macchine a stati finiti
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
MergeSort Usa la tecnica del divide et impera:
Lezione n°7 Splay-Trees e Heaps Prof.ssa Rossella Petreschi
Analisi e Sintesi di circuiti sequenziali
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Il problema del flusso nelle reti
Insiemi disgiunti.
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Unione per ranghi compressi
Tabelle dinamiche Lezione n°3
Analisi ammortizzata Lezione n°2
HeapSort Stesso approccio incrementale del selectionSort Tipo di dato
Algoritmi.
Transcript della presentazione:

Corrispondenza fra stringhe Lezione n°18 Prof.ssa Rossella Petreschi Lezione del 16 /01/ 2012 del Corso di Algoritmi e Strutture Dati Riferimenti: Capitolo 34 del testo T.H.Cormen, C.E.Leiserson, R.L.Rivest “Introduzione agli algoritmi” Edizioni: Jackson libri ASD-A.A.2011/2012 1

Stringhe e spostamenti Siano dati un testo T[1,…,n] e un pattern P [1,…,m] di caratteri presi da un alfabeto finito ∑ (T e P sono anche detti stringhe di caratteri) Problema: trovare tutte le occorrenze di P all’interno di T Diciamo che P appare con spostamento valido s in T se T[s+1,…,s+m]= P[1,…,m] Problema(seconda formulazione): trovare tutti gli spostamenti validi con cui un dato pattern P appare in un dato testo T. Definizioni: ∑* : l’insieme di tutte le stringhe di lunghezza finita formate usando caratteri dell’alfabeto ∑ stringa vuota di lunghezza 0 appartenente a ∑* xy : concatenazione di due stringhe x e y,ovvero creazione di una stringa di lunghezza x + y dove i caratteri di y seguono i caratteri di x. ASD-A.A.2011/2012 2

Prefissi e Suffissi Una stringa w è un prefisso (suffisso) di una stringa x,w pre x (w suf x), se x=wy (x=yw), per qualche stringa y in ∑* (w ≤ x ) Vale: è sia prefisso che suffissso di ogni stringa; sia pre che suf sono relazioni transitive; w suf x sess wa suf xa, per qualunque carattere a (lo stesso per pre) Lemma: siano x,y e z stringhe tali che x pre z e y pre z, allora x  y, se x < y  y  x, se y < x  y = x, se y = x  Problema(terza formulazione): trovare tutti gli spostamenti s, 0≤s≤n-m, tali che P sia suffisso di Ts+m Pk(Tk) prefisso di k caratteri del pattern (testo) P(T) ASD-A.A.2011/2012 3

Algoritmo naif L’algoritmo naif trova tutti gli spostamenti validi controllando l’uguaglianza fra P [1,…,m] e T[s+1,…,s+m] per ognuno degli n-m+1 possibili valori di s for s = 0 to n-m do if P [1,…,m] = T[s+1,…,s+m] then stampa s Tempo computazionale: ((n-m+1)m) ASD-A.A.2011/2012 4

Nozioni di teoria dei numeri Regola di Horner per la valutazione di un polinomio A(x)=∑ ajxj (j= 0,…,n-1): A(x0)= a0+x0(a1+x0(a2+…+x0(an-2+x0(an-1)…) Classe di congruenza modulo n : [a]n= {a+kn: Z∍k} Es. [3]7= {…, -11,-4,3,10,17,…} = [-4]7= [10]7=… ASD-A.A.2011/2012 5

caratteri e cifre p: corrispondente valore decimale del pattern P [1,…,m] (p = ∑ P [j]10j , j = 1,…,m) ts: corrispondente valore decimale della sottostringa ts = T[s+1,…,s+m], s=0,…,n-m Quindi p si può calcolare in tempo O(m) con la regola di Horner: p= P[m]+10(P[m-1]+10(P[m-2]+…+10(P[2]+10(P[1])…) ASD-A.A.2011/2012 6

Calcolo delle Ts t0 può essere calcolato , come p, con la regola di Horner in tempo O(m) La sequenza t1 , t2...tn-m può essere calcolata in tempo O(n-m) tenuto conto che ts+1 = 10(ts – 10m-1T[s+1])+T[s+m+1] dove prima si sottrae la cifra più significativa da ts (-10m-1T[s+1]), poi si trasla il numero di una posizione a sx (moltiplicazione per10) e infine si inserisce l’appropiata cifra meno significativa (+ T[s+m+1]) Il calcolo delle potenze del 10 si può effettuare a priori in tempo O(m). ASD-A.A.2011/2012 7

Versione base dell’algoritmo di Rabin-Karp Dato che s è uno spostamento valido se e solo se ts = p, tutti gli spostamenti validi si ottengono confrontando p con ogni ts La complessità è pari a O(n+m), dato che: p e t0 si calcolano in O(m) tempo tutti gli (n-m) ts si calcolano in tempo costante uno dall’altro le potenze di 10 si calcolano a priori in tempo O(m). Problema: Se le dimensioni di P sono grandi, è irragionevole pensare che ogni operazione aritmetica sia costante ASD-A.A.2011/2012 8

Se le dimensioni di P sono grandi…… p e tutti i ts si calcolano modulo un appropriato numero q in tempo O(n + m), dato che p, t0 e tutte le ricorrenze possono essere eseguite modulo q Tipicamente come q viene scelto un numero primo tale che 10q sia rappresentabile dentro una parola della macchina e questo consente di eseguire tutti i calcoli in precisione aritmetica singola. In generale con un alfabeto d-ario si ha: ts+1 = (d(ts –T[s+1]h)+T[s+m+1]) modq dove h= dm-1(mod q) è il valore della cifra “1” nella posizione più significativa di una porzione di testo di m cifre e q è scelto in modo che dq sia rappresentabile dentro una parola della macchina. ASD-A.A.2011/2012 9

ma c’è un inconveniente….. VALE tscongruo p(mod q) non implica ts= p tsnon congruo p(mod q) implica ts≠ p QUINDI se ts non congruo p(mod q) allora lo spostamento è non valido se ts congruo p(mod q) allora si deve controllare se P [1,…,m] = T[s+1,…,s+m] TEMPO DI ESECUZIONE nel caso peggiore: ((n-m+1)m) nel caso medio: O(n)+O(m(m + n/q)) ASD-A.A.2011/2012 10

Automi a stati finiti Un automa a stati finiti è una quintupla (Q,q0,A, S,) dove Q è un insieme finito di stati. q0 in Q è lo stato iniziale. A in Q è un insieme distinguibile di stati accettanti. S è un alfabeto di input finito.  è una funzione da QxS in Q, chiamata funzione di transizione di M, ovvero (q,a) è il nuovo stato in cui giunge l’automa che era nello stato q dopo aver letto il carattere a. Se lo stato corrente q appartiene ad A, si dice che la macchina M accetta la stringa appena letta, altrimenti l’input letto è rifiutato. Si dice che una macchina accetta una stringa w sess (w) appartiene ad A e la funzione  da * a Q si chiama funzione stato finale ed è definita ricorsivamente: () =q0 ; (wa) =((w),a), per w in * e a in  ASD-A.A.2011/2012 11

Automi e stringhe Per un automa di corrispondenza fra stringhe relativo ad un dato pattern P [1,…,m] si ha Q , l’insieme finito di stati, è (0,1,…m). lo stato iniziale q0 in Q è 0. l’unico stato accettante di A in Q è m. S è un alfabeto di input finito. d , funzione di transizione da QxS in Q, è così definita d(q,a) = s(Pqa), per ogni q in Q e a in S Con s(Pqa), corrispondenza tra S* e (0,1,…m), che misura il più lungo prefisso del pattern P che è anche suffisso di Pqa s è chiamata funzione suffisso ASD-A.A.2011/2012 12

Idea di base In ogni stato q l’automa ha bisogno solo di conoscere la lunghezza del più lungo prefisso di P che sia suffisso di quanto letto fino a quel momento. Per la funzione suffisso si ha che: - Per un qualunque carattere a e una qualunque stringa x, vale s(xa) ≤ s(x)+1 - Per un qualunque carattere a e una qualunque stringa x, se q = s(x), vale s(xa) ≤ s(Pqa) ASD-A.A.2011/2012 13

Calcolo di d Tempo O(m3 S ) Algoritmo calcola d(P, S) m=lungh(P); ciclo da m for q=0 to m ciclo da S do for ogni a in S al più m-1 do k = min (m+1,q+2) fino ad m confronti repeat k = k-1 until Pk suff Pqa d(q,a) = k ritorna d Tempo O(m3 S ) ASD-A.A.2011/2012 14

Algoritmo stringhe/automi Algoritmo stringhe/automi (T,d,m) n=lungh(T); q=0; for i=1 to n do q = d(q, T(i)) if q=m then s = i-m; write “il pattern appare con spostamento s” Tempo O(n) + calcolo di d Il miglior algoritmo di corrispondenza fra stringhe e automi richiede tempo O (n+mS) ASD-A.A.2011/2012 15

Correttezza dell’algoritmo stringhe/automi TEOREMA: Se è la funzione stato-finale di un automa di corrispondenza tra stringhe per un dato pattern P e T(1,n) è un testo di input per l’automa, allora (Ti)=s(Ti), i=0,…,n Dimostrazione Si procede per induzione Passo base T0 =  quindi  (T0) = s(T0) = 0 Ipotesi induttiva (Ti) = s(Ti) Si prova che (Ti+1) = s(Ti+1) (Ti+1) = (Tia) = ((Ti),a) = (q,a) = s(Pq,a) = s(Ti,a)  s(Ti+1) ASD-A.A.2011/2012 16