180 likes | 326 Views
UNIVERSITA’ DI MILANO-BICOCCA CdL IN INFORMATICA. Corso di ALGORITMI COMPLEMENTI Prof. Giancarlo Mauri Distanza di edit e programmazione dinamica. Confronto di sequenze. Il confronto tra sequenze è fondamentale in campi come la biologia computazionale, l’analisi dei testi e molti altri.
E N D
UNIVERSITA’ DI MILANO-BICOCCACdL IN INFORMATICA Corso di ALGORITMI COMPLEMENTI Prof. Giancarlo Mauri Distanza di edit e programmazione dinamica
Confronto di sequenze Il confronto tra sequenze è fondamentale in campi come la biologia computazionale, l’analisi dei testi e molti altri. Possibili obiettivi: • misurare la “similarità” tra le sequenze • allineamento • misurare la “diversità” tra le sequenze • distanza di edit • trovare parti comuni alle sequenze • pattern discovery • allineamento locale
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 edittra due sequenzeS1 e S2 (Levenshtein 66): numero minimo di operazioni di “modifica” necessarie per trasformare S1 in S2
ESEMPIO GETTO GATTO una sostituzione BARDO BRRDO BRODO due sostituzioni o un’inversione e una sostituzione TINTA cinque sostituzioni e una cancellazione TINORE COLORE TOLORE TILORE TINTRE TINTAE TCTGGG AGACCC TGACCC TCACCC TCTCCC TCTGCC TCTGGC GGGTCT complemento inverso
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
Distanza di edit: il problema INPUT: due sequenze S1 e S2 definite su un alfabeto S OUTPUT: distanza di edit tra S1 e S2 e edit transcript ottimale che fornisce la trasformazione da S1 a S2 TECNICA UTILIZZATA:Programmazione Dinamica (PD)
Calcolo della distanza di edit Si considerino le sequenze : S1 = a1 a2 ... ai-1 ai ai+1 ... an S2 = b1 b2 ...... bj-1 bj bj+1... bm Costruiamo l’array: D(i,j) = distanza tra il prefisso a1a2…ai e il prefisso b1b2…bj Il risultato cercato sarà: D(n,m) = distanza tra a1 a2 ... an e b1 b2 ...bm
Calcolo della distanza di edit Si hanno tre possibilità per calcolare D(i,j), noto D(k,l) per k<i e l<j: • il carattere ai va sostituito con il carattere bj e quindi: D(i,j) = D(i-1,j-1)+t(ai,bj) • il carattere ai va cancellato e quindi: D(i,j) = D(i-1,j)+1 • il carattere bj va inserito e quindi: D(i,j) = D(i,j-1)+1 Si hanno tre possibilità per calcolare D(i,j), noto D(k,l) per k<i e l<j: • il carattere ai va sostituito con il bj e quindi: D(i,j) = distanza di edit tra i prefissi a1a2…ai-1 e b1b2…bj-1 + una operazione di sostituzione • il carattere ai va cancellato e quindi: D(i,j) = distanza di edit tra i prefissi a1a2…ai-1 e b1b2…bj + una operazione di cancellazione • il carattere bj va inserito e quindi: D(i,j) = distanza di edit tra i prefissi a1a2…ai e b1b2…bj-1 + una operazione di inserimento t(ai,bj)=1 se ai diverso da bj, altrimenti t(ai,bj)=0
Calcolo della distanza di edit • Si richiama quindi il calcolo di: a1 a2 ... ai-1 ai ai+1 ... an b1 b2 ...... bj-1 bj ... bm D(i-1,j-1) a1 a2 ... ai-1 ai ai+1 ... an b1 b2 ...... bj-1 bj ... bm D(i-1,j) a1 a2 ... ai-1 ai ai+1 ... an b1 b2 ...... bj-1 bj ... bm D(i,j-1)
D(i-1,j-1)+t(ai,bj) D(i-1,j)+1 D(i,j-1)+1 D(i,j) = MIN Calcolo della distanza di edit Dal momento che si vuole un valore minimo, si ottiene la ricorrenza 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)
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) = i D(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 ai ≠ bj 0 altrimenti
Calcolo della distanza di edit In particolare: • per i=n e j=m, si ottiene la distanza di edit D(n,m) tra le sequenze S1 e S2 • per i=0 e j>0, si ottiene la distanza di edit D(0,j) tra la sequenza nulla e e il prefisso b1b2…bj (D(0,j)=j) • per i>0 e j=0, si ottiene la distanza di edit D(i,0) tra il prefisso a1a2…ai e la sequenza nulla e(D(i,0)=i)
Calcolo della distanza di edit I casi base, per i quali il valore di D è calcolabile immediatamente, sono: • D(0,0) = 0 • D(i,0) = i (i cancellazioni) • D(0,j) = j (j cancellazioni)
Calcolo della distanza di edit Correttezza • D(i,j) = D(i-1,j)+1, D(i,j-1)+1 oppure D(i-1,j-1)+t(ai,bj) Non ci sono altre possibilità 1.1 - Sia I l’ultima operazione per ottenere S2 da S1 Allora D(i,j) = D(i,j-1)+1 1.2 - Sia C l’ultima operazione per ottenere S2 da S1 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)}
w r i t e r s w i n t e r Calcolo della distanza di edit Esempio: calcolo della distanza di edit per S1=“winter” (n=6) e S2=“writers” (m=7) Si costruisca la matrice D di n+1 (6+1) righe e m+1 (7+1) colonne Nella cella D(6,7) è memorizzata la distanza di edit tra S1 e S2 …e così di seguito 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,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 Si riempiano le celle D(0,j) e D(i,0) con i rispettivi valori dei casi base j e i 0 1 2 3 4 5 6 7 1 0 1 2 3 4 5 6 2 1 1 1 2 3 4 5 3 2 2 2 2 3 4 5 4 3 3 3 2 3 4 5 5 4 4 4 3 2 3 4 6 5 4 5 4 3 2 3 3
Calcolo della distanza di edit La trasformazione da S1 a S2 relativa alla cella (i,j) è di • sostituzione del carattere ai con il carattere bj se D(i,j)=D(i-1,j-1)+t(ai,bj) • cancellazione del carattere ai se D(i,j)=D(i-1,j)+1 • inserimento del carattere bj se D(i,j)=D(i,j-1)+1 Se ai è uguale a bj, l’operazione di sostituzione è nulla NB: può esistere più di una trasformazione relativa alla cella (i,j)
w r i t e r s 0 1 2 3 4 5 6 7 w 1 0 1 2 3 4 5 6 i 2 1 1 1 2 3 4 5 n 3 2 2 2 2 3 4 5 t 4 3 3 3 2 3 4 5 e 5 4 4 4 3 2 3 4 r 3 6 5 4 5 4 3 2 3 Calcolo della distanza di edit Esempio: ricostruzione della trasformazione da S1=“winter” a S2=“writers” La cella (6,6) è stata prodotta a partire dalla cella (5,5) La cella (6,7) è stata prodotta a partire dalla cella (6,6) …e così di seguito 0 0 1 winters winters wiiters winters writers writers winter winters 2 2 Operazioni: Operazioni: ? - inserimento di s 2 - sostituzione n i 2 - sostituzione i r
Calcolo della distanza di edit La complessità in tempo dell’algoritmo è • O(nm) per il riempimento della matrice di calcolo della distanza di edit • O(n+m) per la ricostruzione della trasformazione da S1 a S2