Algoritmi e Complessità Università di Cmerino Corso di Lure in Informtic (tecnologie informtiche) III periodo didttico Docente: Emnuel Merelli Emil:emnuel.merelli@unicm.it
Lezione Algoritmi e Complessità Argomento: Corrispondenz tr stringhe Obiettivo conoscitivo: Algoritmi di Rbin-Krp, Knuth- Morris-Prtt Cpitolo: 6 e 34
Sottosequenz comune Dt un sequenz X=<x,...,xm>, un sequenz Z=<z,...,zk> viene dett sottosequenz di X se esiste un sequenz, strettmente crescente <i, i,... k > di indici di X tle che per tutti gli indici j=,... k, vle xi j =zj Esempio X = ABCDBDAB Y = BDCABA Z = BCA è un sottosequenz E l più lung sottosequenz?
Sottosequenz comune più lung LCS Dte due sequenze X ed Y, si vuole determinre l sottosequenz comune di X e Y di lunghezz mssim. Esempio X = ABCDBDAB Y = BDCABA Z = BCBA è LCS(X,Y) E un problem di ottimizzzione
Metodo enumertivo Il metodo enumertivo consiste nell enumerre tutte le sottosequenze di X e nel controllre che ogni sottosequenz si nche un sottosequenz di Y. L soluzione richiede un tempo esponenzile Problem intrttbile per sequenze lunghe
Progrmmzione dinmic Progrmmzione dinmic: simile l divide et imper, m tiene trcci (in un tbell) delle soluzioni dei sottoproblemi perché può cpitre di dover risolvere il medesimo sottoproblem per più di un volt. Pssi fondmentli dell progrmmzione dinmic. Crtterizzzione dell struttur di un soluzione ottim. Definizione ricorsiv del vlore di un soluzione ottim 3. Clcolo del vlore di un soluzione ottim con strtegi bottom-up 4. Costruzione di un soluzione ottim prtire dlle informzioni già clcolte.
Crtteristiche del problem per pplicre l progrmmzione dinmic Sottostruttur ottim. Un soluzione ottim per il problem contiene l suo interno le soluzioni ottime dei sottoproblemi Sottoproblemi comuni. Un problem di ottimizzzione h sottoproblemi comuni qundo un lgoritmo ricorsivo richiede di risolvere più di un volt lo stesso sottoproblem
Sottostruttur ottim Teorem Sino X=<x,...,x m > e Y=<y,...,y n > Si Z=<z,...,z k > un qulunque LCS di X e Y.. Se x m =y n, e z k =x m =y n llor Z k- è LCS di X m- e Y n-. Se x m y n, e z k x m llor Z k è LCS di X m- e Y 3. Se x m y n, e z k y n llor Z k è LCS di X e Y n-
Soluzione ricorsiv E fcile notre che il problem LCS soddisf l proprietà dei sottoproblemi comuni. Per trovre un LCS di X e Y si deve necessrimente trovre si uns LCS di X m- e Y si un LCS di X e Y n-. Entrmbi i sottoproblemi devono risolvere il problem di trovre un LCS di X m- e Y n-. Chirmente molti ltri sottoproblemi devono ffrontre e risolvere i medesimi sottoproblemi
Formul ricorsiv del vlore di un soluzione ottim c[i,j] è l lunghezz di un LCS di X i e Y j c[i,j] = c[i-, j-]+ mx(c[i, j-], c[i-,j]) se i= o j= se i,j> e x i =y j se i,j> e x i y j
Clcolo del vlore dell soluzione ottim con tecnic bottom-up Ci sono mn - Θ( mn) - sottoproblemi distinti e quindi è possibile utilizzre l tecnic dell progrmmzione dinmic Ricordimoci che Θ(n) pprossimzione strett Ω(n) limite inferiore sintotico O(n) limite superiore sintotico
LCS-length(X,Y) m=length(x) n=length(y) for i= to m do c[i,]= for j= to n do c[,j]= for i= to m do for j= to n do if x i =y j then c[i,j]=c[i-,j-] + b[i,j]= else if c[i-,j] c[i,j-] then c[i,j]=c[i,j-] b[i,j]= else c[i,j]=c[i,j-] b[i,j]= return b,c
3 3 3 3 3 4 3 3 4 4 B D C A B A A B C B D A B 3 4 5 6 3 4 5 6 7
Costruzione di un LCS Print-LCS(b,X,i,j) if i= or j= then return if b[i,j] = then Print-LCS(b,X,i-,j-) print x i else if b[i,j] = then Print-LCS(b,X,i-,j) else Print-LCS(b,X,i,j-)
Domnde L sottosequenz Z è l unic LCS? Qule ltr informzione contiene l tbell c? E possibile ridurre l complessità per determinre l soluzione di questo problem?
Corrispondenz tr stringhe Problem Trovre tutte le occorrenze di un string P ll interno di un testo T. Formlizzzione Dto T[..n] e P[..m] con m n, e i crtteri presenti in T e P sino presi d un lfbeto {,} oppure {,b,..., z} Si dice che il pttern P occorre comincire d s+ nel testo T (o equivlentemente (ppre con spostmento s nel testo T), se s n-m e T[s+.. s+m] = P[.. m] Cioè se T[s+j]=P[j] per j m
Pttern Mtching T b c b b c P s=3 b s=3 è uno spostmento vlido
Notzione lfbeto * insieme delle stringhe di lunghezz finit ε string vuot di lunghezz zero x lunghezz di un string xy conctenzione di due stringhe x + y lunghezz dell string conctent w èprefisso di un string x se x=wy w èsuffisso di un string x se x=yw
Algoritmo ingenuo Nive-String-Mtching(T,P). n=length[t]. m=length[p] 3. for s= to n-m 4. do if P[..m]=T[s+..s+m] 5. then stmp Il ptternppre con spostmento s c b c c b c c b c b b b s= s= s= c b c Θ((n-m+)m) cso peggiore s=3 b
Nive-string-Mtcher Θ((n-m+)m) L lgoritmo ingenuo di corrispondenz tr stringhe è inefficiente perché le informzioni ottenute nel testo per un certo vlore di s sono completmente ignorte qundo si considerno ltri vlori di s Esempio: Se P= b e si trov che s= è vlido, llor nessuno degli spostmenti,, e 3 srà vlido
Algoritmo di Rbin-Krp Si ssume che ogni crttere di un string corrispond d un cifr decimle ={,,,3,4...,9 } Si può ssumenre che ogni crttere si un cifr in notzione bse d dove d= Un string di k crtteri consecutivi corrisponde d un numero decimle di lunghezz k.pertnto un string P=345 corrisponde l numero 345 dto P[..m] si denoti con p il numero decimle corripondente dto T[..n] si denoti con t s il decimle corrispondente ll sottostring T[s+..s+m] di lunghezz m per s=,,..n-m t s =p se e solo se T[s+..s+m]=P[..m] (s spostmento vlido)
P=345 p=7 q=3 7= 345 mod 3 3 5 9 3 4 5 6 7 3 9 9 7 mod 3 3 5 9 3 4 5 6 7 3 9 9 8 9 3 7 8 4 5 7 9 Corrispondenz vlid Colpo mncto
Nuov cifr più significtiv 3 4 5 Vecchi cifr più significtiv trslzione 7 45 = (345 3x)x+ (mod 3) = (7-3x3) x+ (mod 3) = 8 (mod 3) 8
Algoritmo di Rbin-Krp Rbin-Kro-Mtcher(T,P,d,q). n=length[t]. m=length[p] 3. h= d m- mod q 4. p= 5. t = 6. for i= to m 7. do p=(dp + P[i]) mod q 8. t =(dt + T[i]) mod q 9. for s= to n-m. do if p=t s. then if P[..m]=T[s+..s+m]. then stmp Il ptternppre con spostmento s 3. if s< n-m 4. then t s+ = (d(ts T[s+]h) + T[s+m+]) mod q