230 likes | 361 Views
UNIVERSITA’ DI MILANO-BICOCCA LAUREA MAGISTRALE IN BIOINFORMATICA. Corso di BIOINFORMATICA: TECNICHE DI BASE Prof. Giancarlo Mauri Lezione 4 Distanza di edit e programmazione dinamica. Confronto di sequenze. Il confronto tra sequenze in biologia computazionale è la base per:
E N D
UNIVERSITA’ DI MILANO-BICOCCALAUREA MAGISTRALE IN BIOINFORMATICA Corso di BIOINFORMATICA: TECNICHE DI BASE Prof. Giancarlo Mauri Lezione 4 Distanza di edit e programmazione dinamica
Confronto di sequenze Il confronto tra sequenze in biologia computazionale è la base per: • 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
Confronto di sequenze Perché si confrontano sequenze in biologia? Capire da dove possono nascere le differenze: errori di trascrizione mutazioni inserimento cancellazione sostituzione di basi
Distanza tra due sequenze Distanza tra due sequenze S1 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 COLORE TOLORE TILORE TINTRE TINTAE TINORE GGGTCT AGACCC TGACCC TCACCC TCTCCC TCTGCC TCTGGC TCTGGG 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)
Procedura SOMMA(n) begin if n=1 then somma:=n; else somma:=SOMMA(n-1)+n; return somma; end SOMMA(3) +4 SOMMA(2) +3 SOMMA(1) +2 Programmazione Dinamica Perché si usa la Programmazione Dinamica? Per rendere efficiente l’implementazione di procedure ricorsive Esempio: procedura ricorsiva per il calcolo della somma dei numeri da 1 a n Esempio di chiamata SOMMA(4) SOMMA(4)
Programmazione Dinamica Quali sono le procedure ricorsive da sostituire con un algoritmo di PD? Quelle in cui si presentano sottoproblemi ripetuti Esempio:i numeri di Fibonacci • Obiettivo • dare un modello matematico della crescita di una popolazione di conigli • Assunzioni: • Si parte (tempo 0) con una coppia di conigli neonati • Ogni coppia genera una nuova coppia ad ogni unità di tempo, a partire dalla seconda unità dopo la nascita • I conigli non muoiono mai • Modello matematico per calcolare il numero di coppie al tempo n: F(n) := se (n=0) o (n=1), allora 1 altrimenti F(n-1)+F(n-2)
FIB(4) FIB(4) FIB(4) FIB(4) FIB(3) FIB(3) FIB(3) FIB(3) FIB(2) FIB(2) FIB(2) Procedura FIB(n) begin if n=0 or n=1 then return1; a:=n-1;b:=n-2; f1:=FIBONACCI(a); f2:=FIBONACCI(b); return f1+f2; end FIB(1) FIB(0) FIB(1) FIB(1) FIB(1) FIB(2) FIB(2) FIB(2) FIB(2) FIB(1) FIB(1) NB: nella chiamata FIB(4), il numero di Fibonacci per n=2 viene calcolato 2 volte FIB(0) FIB(0) Programmazione Dinamica Esempio di chiamata FIB(4) Esempio: procedura ricorsiva per il calcolo dei numeri di Fibonacci
Procedura FIB2(n) begin F:=(); i:=0; for i=0 to n do begin if i=0 then F[i]:=0; else if i=1 then F[i]:=1; else F[i]:=F[i-1]+F[i-2]; end return F(n); end Programmazione Dinamica Algoritmo alternativo a FIB(n) NB: nella chiamata FIB2(4), il valore F[2] viene sfruttato 2 volte ma calcolato 1 volta
Programmazione Dinamica Passi fondamentali della Programmazione Dinamica • Riduzione del problema in sottoproblemi • Risoluzione di tutti i sottoproblemi possibili • Risoluzione del problema originale tramite l’utilizzo delle soluzioni dei suoi sottoproblemi
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