23
UNIVERSITA’ DI MILANO-BICOCCA UNIVERSITA’ DI MILANO-BICOCCA LAUREA MAGISTRALE IN LAUREA MAGISTRALE IN BIOINFORMATICA BIOINFORMATICA Corso di BIOINFORMATICA: TECNICHE DI BASE Prof. Giancarlo Mauri Lezione 4 Distanza di edit e programmazione dinamica

UNIVERSITA’ DI MILANO-BICOCCA LAUREA MAGISTRALE IN BIOINFORMATICA

Embed Size (px)

DESCRIPTION

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: - PowerPoint PPT Presentation

Citation preview

UNIVERSITA’ DI MILANO-BICOCCAUNIVERSITA’ DI MILANO-BICOCCALAUREA MAGISTRALE IN LAUREA MAGISTRALE IN

BIOINFORMATICABIOINFORMATICA

Corso di

BIOINFORMATICA: TECNICHE DI BASE

Prof. Giancarlo Mauri

Lezione 4

Distanza di edit e programmazione dinamica

2

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

3

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

4

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

EsempioGATTOGETTO

BARDOBRRDOBRODO

una sostituzione

due sostituzioni o un’inversione e una sostituzione

COLORETOLORETILORETINORETINTRETINTAETINTA cinque sostituzioni e una cancellazione

AGACCC complemento inversoTGACCC TCACCC TCTCCC TCTGCC TCTGGC TCTGGG GGGTCT

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

INPUTINPUT:

due sequenze S1 e S2 definite su un alfabeto

OUTPUTOUTPUT:

distanza di edit tra S1 e S2 e edit transcript ottimale che fornisce la trasformazione da S1 a S2

TECNICA UTILIZZATA: Programmazione Dinamica (PD)TECNICA UTILIZZATA: Programmazione Dinamica (PD)

7

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

Procedura SOMMA(n)

begin

if n=1 then

somma:=n;

else

somma:=SOMMA(n-1)+n;

return somma;

end

Esempio di chiamata SOMMA(4)

SOMMA(4)

SOMMA(3) +4

SOMMA(2) +3

SOMMA(1) +2

8

Programmazione Dinamica

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)

Quali sono le procedure ricorsive da sostituire con un algoritmo di PD?

Quelle in cui si presentano sottoproblemi ripetuti

9

Programmazione Dinamica

Esempio: procedura ricorsiva per il calcolo dei numeri di Fibonacci

Procedura FIB(n)begin

if n=0 or n=1 then

return 1;

a:=n-1;b:=n-2;

f1:=FIBONACCI(a);

f2:=FIBONACCI(b);

return f1+f2;

end

Esempio di chiamata FIB(4)

FIB(3)

FIB(2)

FIB(4)

FIB(3)

FIB(2)

FIB(2)

FIB(4)

FIB(1)

FIB(3)

FIB(2)

FIB(2)

FIB(4)

FIB(1)

FIB(1)

FIB(0)

FIB(3)

FIB(2)

FIB(2)

FIB(4)

FIB(1)

FIB(0)

FIB(1)

FIB(1)

FIB(0)NB: nella chiamata FIB(4), il numero diFibonacci per n=2 viene calcolato 2 volte

NB: nella chiamata FIB(4), il numero diFibonacci per n=2 viene calcolato 2 volte

10

Programmazione Dinamica

Algoritmo alternativo a FIB(n)

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

NB: nella chiamata FIB2(4), il valore F[2]viene sfruttato 2 volte ma calcolato 1 volta

NB: nella chiamata FIB2(4), il valore F[2]viene sfruttato 2 volte ma calcolato 1 volta

11

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

12

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

13

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

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

Calcolo della distanza di edit

t(ai,bj)=1 se ai diverso da bj,altrimenti t(ai,bj)=0

14

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

a1 a2 ... ai-1 ai ai+1 ... an

b1 b2 ...... bj-1 bj ... bm

a1 a2 ... ai-1 ai ai+1 ... an

b1 b2 ...... bj-1 bj ... bm

D(i-1,j-1)

D(i-1,j)

D(i,j-1)

15

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(ai,bj)

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)

16

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

17

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 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 (D(i,0)=i)

18

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)

19

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(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)}

20

Calcolo della distanza di edit

Esempio: calcolo della distanza di edit per S1=“winter” (n=6) e S2=“writers” (m=7)

w r i t e r s

w

n

t

i

e

r

Si costruisca lamatrice D di n+1(6+1) righe e m+1(7+1) colonne

Si costruisca lamatrice D di n+1(6+1) righe e m+1(7+1) colonne

Si riempiano lecelle D(0,j) e D(i,0)con i rispettivivalori dei casi basej e i

Si riempiano lecelle D(0,j) e D(i,0)con i rispettivivalori dei casi basej e i

0 1 2 3 4 5 6 7

1

2

3

4

5

6

La cella (1,1) avràvalore D(1,1) datodal minimo tra:- D(0,0)+t(w,w)=0- D(0,1)+1=2- D(1,0)+1=2Quindi:D(1,1)=0

La cella (1,1) avràvalore D(1,1) datodal minimo tra:- D(0,0)+t(w,w)=0- D(0,1)+1=2- D(1,0)+1=2Quindi:D(1,1)=0

0La cella (1,2) avràvalore D(1,2) datodal minimo tra:- D(0,1)+t(w,r)=2- D(0,2)+1=3- D(1,1)+1=1Quindi:D(1,2)=1

La cella (1,2) avràvalore D(1,2) datodal minimo tra:- D(0,1)+t(w,r)=2- D(0,2)+1=3- D(1,1)+1=1Quindi:D(1,2)=1

1

…e così di seguito

…e così di seguito

2 3 4 5 6

1 1 1 2 3 4 5

2 2 2 2 3 4 5

3 3 3 2 3 4 5

4 4 4 3 2 3 4

5 4 5 4 3 2 3

Nella cella D(6,7)è memorizzatala distanza di edittra S1 e S2

Nella cella D(6,7)è memorizzatala distanza di edittra S1 e S2

3

21

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 seD(i,j)=D(i-1,j-1)+t(ai,bj)

cancellazione del carattere ai seD(i,j)=D(i-1,j)+1

inserimento del carattere bj seD(i,j)=D(i,j-1)+1

Se ai è uguale a bj, l’operazionedi sostituzione è nulla

NB: può esistere più di una trasformazionerelativa alla cella (i,j)

NB: può esistere più di una trasformazionerelativa alla cella (i,j)

22

Calcolo della distanza di edit

Esempio: ricostruzione della trasformazione da S1=“winter” a S2=“writers”

w r i t e r s

w

n

t

i

e

r

0 1 2 3 4 5 6 7

1

2

3

4

5

6

0 1 2 3 4 5 6

1 1 1 2 3 4 5

2 2 2 2 3 4 5

3 3 3 2 3 4 5

4 4 4 3 2 3 4

5 4 5 4 3 2 33

La cella (6,7) è stataprodotta a partiredalla cella (6,6)

La cella (6,7) è stataprodotta a partiredalla cella (6,6)

winter

2

winters

2

La cella (6,6) è stataprodotta a partiredalla cella (5,5)

La cella (6,6) è stataprodotta a partiredalla cella (5,5)

winters

2

…e così di seguito…e così di seguito

winters 2winters1

wiiters

0

writers

0

writers

Operazioni: ?- inserimento di s

Operazioni:

- sostituzione n i- sostituzione i r

23

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