UNIVERSITA’ DI MILANO-BICOCCA CdL IN INFORMATICA Corso di ALGORITMI COMPLEMENTI Prof. Giancarlo Mauri Distanza di edit e programmazione dinamica
2 Confronto di sequenze Il confronto tra sequenze è fondamentale in campi come la biologia computazionale, l’analisi dei testi e molti altri. Possibili obiettivi: 4 misurare la “similarità” tra le sequenze allineamento 4 misurare la “diversità” tra le sequenze distanza di edit 4 trovare parti comuni alle sequenze pattern discovery allineamento locale
3 Distanza tra due sequenze Come si misura la similarità ? Bisogna capire da dove possono nascere le differenze: errori di trascrizione, mutazioni, inserimento, cancellazione o sostituzione di basi... Misuriamo la diversità Distanza di edit tra due sequenze S 1 e S 2 (Levenshtein 66): numero minimo di operazioni di “modifica” necessarie per trasformare S 1 in S 2
4 ESEMPIO GATTO GETTO BARDOBRRDOBRODO una sostituzione due sostituzioni o un’inversione e una sostituzione COLORETOLORETILORETINORETINTRETINTAE TINTA cinque sostituzioni e una cancellazione AGACCC complemento inverso TGACCCTCACCCTCTCCCTCTGCCTCTGGCTCTGGGGGGTCT
5 Edit transcript I = inserisci C = cancella S = sostituisci N = lascia invariato SINCNCNNI v intner wri t ers Rappresenta una particolare trasformazione di una stringa in un’altra
6 Distanza di edit: il problema INPUT INPUT: due sequenze S 1 e S 2 definite su un alfabeto OUTPUT OUTPUT: distanza di edit tra S 1 e S 2 e edit transcript ottimale che fornisce la trasformazione da S 1 a S 2 TECNICA UTILIZZATA: Programmazione Dinamica (PD)
7 Calcolo della distanza di edit Si considerino le sequenze : S 1 = a 1 a 2... a i-1 a i a i+1... a n S 2 = b 1 b b j-1 b j b j+1... b m Costruiamo l’array: D(i,j) = distanza tra il prefisso a 1 a 2 …a i e il prefisso b 1 b 2 …b j Il risultato cercato sarà: D(n,m) = distanza tra a 1 a 2... a n e b 1 b 2...b m
8 Si hanno tre possibilità per calcolare D(i,j), noto D(k,l) per k<i e l<j: 4 il carattere a i va sostituito con il b j e quindi: D(i,j) = distanza di edit tra i prefissi a 1 a 2 …a i-1 e b 1 b 2 …b j-1 + una operazione di sostituzione 4 il carattere a i va cancellato e quindi: D(i,j) = distanza di edit tra i prefissi a 1 a 2 …a i-1 e b 1 b 2 …b j + una operazione di cancellazione 4 il carattere b j va inserito e quindi: D(i,j) = distanza di edit tra i prefissi a 1 a 2 …a i e b 1 b 2 …b j-1 + una operazione di inserimento Si hanno tre possibilità per calcolare D(i,j), noto D(k,l) per k<i e l<j: 4 il carattere a i va sostituito con il carattere b j e quindi: D(i,j) = D(i-1,j-1)+t(a i,b j ) 4 il carattere a i va cancellato e quindi: D(i,j) = D(i-1,j)+1 4 il carattere b j va inserito e quindi: D(i,j) = D(i,j-1)+1 Calcolo della distanza di edit t( a i,b j )=1 se a i diverso da b j, altrimenti t(a i,b j )=0
9 Calcolo della distanza di edit 4 Si richiama quindi il calcolo di: a 1 a 2... a i-1 a i a i+1... a n b 1 b b j-1 b j... b m a 1 a 2... a i-1 a i a i+1... a n b 1 b b j-1 b j... b m a 1 a 2... a i-1 a i a i+1... a n b 1 b b j-1 b j... b m D(i-1,j-1) D(i-1,j) D(i,j-1)
10 Calcolo della distanza di edit Dal momento che si vuole un valore minimo, si ottiene la ricorrenza D(i,j) = MIN D(i-1,j-1)+t(a i,b j ) D(i-1,j)+1 D(i,j-1)+1 che stabilisce un legame tra il generico sottoproblema D(i,j) e i sottoproblemi D(i-1,j-1), D(i-1,j) e D(i,j-1)
11 Calcolo della distanza di edit Ricorrenza: stabilisce un legame ricorsivo tra il valore di D(i,j) e i valori per indici più piccoli, fino a un valore base. BASE: D(i,0) = iD(0,j) = j PASSO: D(i,j) = min{D(i-1,j)+1; D(i,j-1)+1; D(i-1,j-1)+t(i,j)} con t(i,j) = 1 se a i ≠ b j 0 altrimenti
12 Calcolo della distanza di edit In particolare: 4 per i=n e j=m, si ottiene la distanza di edit D(n,m) tra le sequenze S 1 e S 2 per i=0 e j>0, si ottiene la distanza di edit D(0,j) tra la sequenza nulla e il prefisso b 1 b 2 …b j (D(0,j)=j) per i>0 e j=0, si ottiene la distanza di edit D(i,0) tra il prefisso a 1 a 2 …a i e la sequenza nulla (D(i,0)=i)
13 Calcolo della distanza di edit I casi base, per i quali il valore di D è calcolabile immediatamente, sono: 4 D(0,0) = 0 4 D(i,0) = i (i cancellazioni) 4 D(0,j) = j (j cancellazioni)
14 Calcolo della distanza di edit Correttezza 1. D(i,j) = D(i-1,j)+1, D(i,j-1)+1 oppure D(i-1,j-1)+t(a i,b j ) Non ci sono altre possibilità Sia I l’ultima operazione per ottenere S 2 da S 1 Allora D(i,j) = D(i,j-1) Sia C l’ultima operazione per ottenere S 2 da S 1 Allora D(i,j) = D(i-1,j)+1 …… 2. D(i,j) ≤ min {D(i-1,j)+1, D(i,j-1)+1, D(i-1,j-1)+t(i,j)}
15 Calcolo della distanza di edit Esempio: calcolo della distanza di edit per S 1 =“winter” (n=6) e S 2 =“writers” (m=7) writers w n t i e r Si costruisca la matrice D di n+1 (6+1) righe e m+1 (7+1) colonne Si costruisca la matrice D di n+1 (6+1) righe e m+1 (7+1) colonne Si riempiano le celle D(0,j) e D(i,0) con i rispettivi valori dei casi base j e i Si riempiano le celle D(0,j) e D(i,0) con i rispettivi valori dei casi base j e i La cella (1,1) avrà valore D(1,1) dato dal minimo tra: - D(0,0)+t(w,w)=0 - D(0,1)+1=2 - D(1,0)+1=2 Quindi: D(1,1)=0 La cella (1,1) avrà valore D(1,1) dato dal minimo tra: - D(0,0)+t(w,w)=0 - D(0,1)+1=2 - D(1,0)+1=2 Quindi: D(1,1)=0 0 La cella (1,2) avrà valore D(1,2) dato dal minimo tra: - D(0,1)+t(w,r)=2 - D(0,2)+1=3 - D(1,1)+1=1 Quindi: D(1,2)=1 La cella (1,2) avrà valore D(1,2) dato dal minimo tra: - D(0,1)+t(w,r)=2 - D(0,2)+1=3 - D(1,1)+1=1 Quindi: D(1,2)=1 1 …e così di seguito …e così di seguito Nella cella D(6,7) è memorizzata la distanza di edit tra S 1 e S 2 Nella cella D(6,7) è memorizzata la distanza di edit tra S 1 e S 2 3
16 Calcolo della distanza di edit La trasformazione da S 1 a S 2 relativa alla cella (i,j) è di 4 sostituzione del carattere a i con il carattere b j se D(i,j)=D(i-1,j-1)+t(a i,b j ) 4 cancellazione del carattere a i se D(i,j)=D(i-1,j)+1 4 inserimento del carattere b j se D(i,j)=D(i,j-1)+1 Se a i è uguale a b j, l’operazione di sostituzione è nulla NB: può esistere più di una trasformazione relativa alla cella (i,j) NB: può esistere più di una trasformazione relativa alla cella (i,j)
17 Calcolo della distanza di edit Esempio: ricostruzione della trasformazione da S 1 =“winter” a S 2 =“writers” writers w n t i e r La cella (6,7) è stata prodotta a partire dalla cella (6,6) La cella (6,7) è stata prodotta a partire dalla cella (6,6) winter 2 winters 2 La cella (6,6) è stata prodotta a partire dalla cella (5,5) La cella (6,6) è stata prodotta a partire dalla cella (5,5) winters 2 …e così di seguito winters 2 1 wiiters 0 writers 0 Operazioni: ? - inserimento di s Operazioni: - sostituzione n i - sostituzione i r
18 Calcolo della distanza di edit La complessità in tempo dell’algoritmo è 4 O(nm) per il riempimento della matrice di calcolo della distanza di edit 4 O(n+m) per la ricostruzione della trasformazione da S 1 a S 2