1 / 18

UNIVERSITA’ DI MILANO-BICOCCA CdL IN INFORMATICA

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.

autumn-koch
Télécharger la présentation

UNIVERSITA’ DI MILANO-BICOCCA CdL IN INFORMATICA

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. UNIVERSITA’ DI MILANO-BICOCCACdL 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: • 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

  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 edittra due sequenzeS1 e S2 (Levenshtein 66): numero minimo di operazioni di “modifica” necessarie per trasformare S1 in S2

  4. 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

  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: 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)

  7. 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

  8. 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

  9. 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)

  10. 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)

  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) = 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

  12. 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)

  13. 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)

  14. 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)}

  15. 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

  16. 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)

  17. 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

  18. 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

More Related