recherche de motifs, alignement de séquences · exemples 1 chercherlecodonstart’atg’...

81
Recherche de motifs, Alignement de séquences P. Chassignet 14 février 2014 1/14

Upload: dohanh

Post on 12-Sep-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

Recherche de motifs,Alignement de séquences

P. Chassignet

14 février 2014

1/14

Plan

1 Recherche de motifs

2 Alignement de séquences

2/14

Exemples

1 chercher le codon start ’ATG’

méthode find de string (plus lent sur séquence Biopython) :

def find_counter(motif, sequence) :count = 0pos = 0while True :

pos = sequence.find(motif, pos)if pos == -1 : breakpos += 1 # ou 3count += 1

return count

2 chercher aussi le codon start alternatif ’GTG’,en préservant l’ordre d’occurrence

plus compliqué avec find, coût en temps × 2

3/14

Exemples

1 chercher le codon start ’ATG’

méthode find de string (plus lent sur séquence Biopython) :

def find_counter(motif, sequence) :count = 0pos = 0while True :

pos = sequence.find(motif, pos)if pos == -1 : breakpos += 1 # ou 3count += 1

return count

2 chercher aussi le codon start alternatif ’GTG’,en préservant l’ordre d’occurrence

plus compliqué avec find, coût en temps × 2

3/14

Exemples

1 chercher le codon start ’ATG’

méthode find de string (plus lent sur séquence Biopython) :

def find_counter(motif, sequence) :count = 0pos = 0while True :

pos = sequence.find(motif, pos)if pos == -1 : breakpos += 1 # ou 3count += 1

return count

2 chercher aussi le codon start alternatif ’GTG’,en préservant l’ordre d’occurrence

plus compliqué avec find, coût en temps × 2

3/14

Exemples

1 chercher le codon start ’ATG’

méthode find de string (plus lent sur séquence Biopython) :

def find_counter(motif, sequence) :count = 0pos = 0while True :

pos = sequence.find(motif, pos)if pos == -1 : breakpos += 1 # ou 3count += 1

return count

2 chercher aussi le codon start alternatif ’GTG’,en préservant l’ordre d’occurrence

plus compliqué avec find, coût en temps ?

× 2

3/14

Exemples

1 chercher le codon start ’ATG’

méthode find de string (plus lent sur séquence Biopython) :

def find_counter(motif, sequence) :count = 0pos = 0while True :

pos = sequence.find(motif, pos)if pos == -1 : breakpos += 1 # ou 3count += 1

return count

2 chercher aussi le codon start alternatif ’GTG’,en préservant l’ordre d’occurrence

plus compliqué avec find, coût en temps × 2

3/14

Automate pour ’ATG’ ou ’GTG’

A

G

AT

GT

AG

A

G

T

A

G

T

A

G?A

G?

même temps pour 1 ou 2 motifs, mais relativement lent (Python)

4/14

Automate pour ’ATG’ ou ’GTG’

A

G

AT

GT

AG

A

G

T

A

G

T

A

G?A

G?

même temps pour 1 ou 2 motifs, mais relativement lent (Python)4/14

Automate pour ’ATG’ ou ’GTG’

machine = {’’ : { ’N’ : (’’, 0), ’A’ : (’A’, 0), ’C’ : (’’, 0),

’G’ : (’G’, 0), ’T’ : (’’, 0) },’A’ : { ’N’ : (’’, 0), ’A’ : (’A’, 0), ’C’ : (’’, 0),

’G’ : (’G’, 0), ’T’ : (’AT’, 0) },’G’ : { ’N’ : (’’, 0), ’A’ : (’A’, 0), ’C’ : (’’, 0),

’G’ : (’G’, 0), ’T’ : (’GT’, 0) },’AT’ : { ’N’ : (’’, 0), ’A’ : (’A’, 0), ’C’ : (’’, 0),

’G’ : (’G’, 1), ’T’ : (’’, 0) },’GT’ : { ’N’ : (’’, 0), ’A’ : (’A’, 0), ’C’ : (’’, 0),

’G’ : (’G’, 1), ’T’ : (’’, 0) },}

next_state, increment = machine[state][c]

5/14

Expressions régulières

import re

def regexp_counter(motif, sequence) :fsm = re.compile(motif)count = 0pos = 0while True :

result = fsm.search(sequence, pos)if result == None : break#pos = result.end()pos = result.start()+1count += 1

return count

exemples : ’ATG’ ’[AG]TG’ ’T(A[AG]|GA)’un peu plus lent que string.find et même comportement !

6/14

Expressions régulières

import re

def regexp_counter(motif, sequence) :fsm = re.compile(motif)count = 0pos = 0while True :

result = fsm.search(sequence, pos)if result == None : break#pos = result.end()pos = result.start()+1count += 1

return count

exemples : ’ATG’ ’[AG]TG’ ’T(A[AG]|GA)’

un peu plus lent que string.find et même comportement !

6/14

Expressions régulières

import re

def regexp_counter(motif, sequence) :fsm = re.compile(motif)count = 0pos = 0while True :

result = fsm.search(sequence, pos)if result == None : break#pos = result.end()pos = result.start()+1count += 1

return count

exemples : ’ATG’ ’[AG]TG’ ’T(A[AG]|GA)’un peu plus lent que string.find

et même comportement !

6/14

Expressions régulières

import re

def regexp_counter(motif, sequence) :fsm = re.compile(motif)count = 0pos = 0while True :

result = fsm.search(sequence, pos)if result == None : break#pos = result.end()pos = result.start()+1count += 1

return count

exemples : ’ATG’ ’[AG]TG’ ’T(A[AG]|GA)’un peu plus lent que string.find et même comportement !

6/14

Exercices

écrire l’expression régulière pour un cadre de lecture complet

’[AG]TG(...)*?T(A[AG]|GA)’

’[AG]TG([ACGT][ACGT][ACGT])*?T(A[AG]|GA)’

entre 100 et 1000 codons

’[AG]TG(...){100,1000}?TAA’

avec TATA box (ie. TATA[AT]A[AT])située une trentaine de bases en amont

’TATA[AT]A[AT].{25,35}?[AG]TG(...){100,1000}?TAA’

7/14

Exercices

écrire l’expression régulière pour un cadre de lecture complet

’[AG]TG(...)*?T(A[AG]|GA)’

’[AG]TG([ACGT][ACGT][ACGT])*?T(A[AG]|GA)’

entre 100 et 1000 codons

’[AG]TG(...){100,1000}?TAA’

avec TATA box (ie. TATA[AT]A[AT])située une trentaine de bases en amont

’TATA[AT]A[AT].{25,35}?[AG]TG(...){100,1000}?TAA’

7/14

Exercices

écrire l’expression régulière pour un cadre de lecture complet

’[AG]TG(...)*?T(A[AG]|GA)’

’[AG]TG([ACGT][ACGT][ACGT])*?T(A[AG]|GA)’

entre 100 et 1000 codons

’[AG]TG(...){100,1000}?TAA’

avec TATA box (ie. TATA[AT]A[AT])située une trentaine de bases en amont

’TATA[AT]A[AT].{25,35}?[AG]TG(...){100,1000}?TAA’

7/14

Exercices

écrire l’expression régulière pour un cadre de lecture complet

’[AG]TG(...)*?T(A[AG]|GA)’

’[AG]TG([ACGT][ACGT][ACGT])*?T(A[AG]|GA)’

entre 100 et 1000 codons

’[AG]TG(...){100,1000}?TAA’

avec TATA box (ie. TATA[AT]A[AT])située une trentaine de bases en amont

’TATA[AT]A[AT].{25,35}?[AG]TG(...){100,1000}?TAA’

7/14

Exercices

écrire l’expression régulière pour un cadre de lecture complet

’[AG]TG(...)*?T(A[AG]|GA)’

’[AG]TG([ACGT][ACGT][ACGT])*?T(A[AG]|GA)’

entre 100 et 1000 codons

’[AG]TG(...){100,1000}?TAA’

avec TATA box (ie. TATA[AT]A[AT])située une trentaine de bases en amont

’TATA[AT]A[AT].{25,35}?[AG]TG(...){100,1000}?TAA’

7/14

Exercices

écrire l’expression régulière pour un cadre de lecture complet

’[AG]TG(...)*?T(A[AG]|GA)’

’[AG]TG([ACGT][ACGT][ACGT])*?T(A[AG]|GA)’

entre 100 et 1000 codons

’[AG]TG(...){100,1000}?TAA’

avec TATA box (ie. TATA[AT]A[AT])située une trentaine de bases en amont

’TATA[AT]A[AT].{25,35}?[AG]TG(...){100,1000}?TAA’

7/14

Exercices

écrire l’expression régulière pour un cadre de lecture complet

’[AG]TG(...)*?T(A[AG]|GA)’

’[AG]TG([ACGT][ACGT][ACGT])*?T(A[AG]|GA)’

entre 100 et 1000 codons

’[AG]TG(...){100,1000}?TAA’

avec TATA box (ie. TATA[AT]A[AT])située une trentaine de bases en amont

’TATA[AT]A[AT].{25,35}?[AG]TG(...){100,1000}?TAA’

7/14

Plan

1 Recherche de motifs

2 Alignement de séquences

8/14

Principes

KAFAQHSS..L.K..CHY.RTHIGE ... CNQCGKAF...S..Q.HG..........YHMCQFHCRYVNNHSGE ... HNQCGKAFPTPSHLQYHERT

score additif :scores élémentaires pour chaque paire (ex. log prob.)pénalités pour les trous

notations :

Deux séquences X = (X1,X2, . . . ,Xm) et Y = (Y1,Y2, . . . ,Yn)

s(x , y) le score d’alignement de la paire (x , y)

p la pénalité (fixe) associée à un trou, avec p > 0

S(i , j) le meilleur score d’alignement entre les séquences partielles(X1, . . . ,Xi ) et (Y1, . . . ,Yj)

meilleur = maximal

9/14

Principes

KAFAQHSS..L.K..CHY.RTHIGE ... CNQCGKAF...S..Q.HG..........YHMCQFHCRYVNNHSGE ... HNQCGKAFPTPSHLQYHERT

score additif :scores élémentaires pour chaque paire (ex. log prob.)pénalités pour les trous

notations :

Deux séquences X = (X1,X2, . . . ,Xm) et Y = (Y1,Y2, . . . ,Yn)

s(x , y) le score d’alignement de la paire (x , y)

p la pénalité (fixe) associée à un trou, avec p > 0

S(i , j) le meilleur score d’alignement entre les séquences partielles(X1, . . . ,Xi ) et (Y1, . . . ,Yj)

meilleur = maximal

9/14

Principes

KAFAQHSS..L.K..CHY.RTHIGE ... CNQCGKAF...S..Q.HG..........YHMCQFHCRYVNNHSGE ... HNQCGKAFPTPSHLQYHERT

score additif :scores élémentaires pour chaque paire (ex. log prob.)pénalités pour les trous

notations :

Deux séquences X = (X1,X2, . . . ,Xm) et Y = (Y1,Y2, . . . ,Yn)

s(x , y) le score d’alignement de la paire (x , y)

p la pénalité (fixe) associée à un trou, avec p > 0

S(i , j) le meilleur score d’alignement entre les séquences partielles(X1, . . . ,Xi ) et (Y1, . . . ,Yj)

meilleur = maximal

9/14

Principes

KAFAQHSS..L.K..CHY.RTHIGE ... CNQCGKAF...S..Q.HG..........YHMCQFHCRYVNNHSGE ... HNQCGKAFPTPSHLQYHERT

score additif :scores élémentaires pour chaque paire (ex. log prob.)pénalités pour les trous

notations :

Deux séquences X = (X1,X2, . . . ,Xm) et Y = (Y1,Y2, . . . ,Yn)

s(x , y) le score d’alignement de la paire (x , y)

p la pénalité (fixe) associée à un trou, avec p > 0

S(i , j) le meilleur score d’alignement entre les séquences partielles(X1, . . . ,Xi ) et (Y1, . . . ,Yj)

meilleur = maximal

9/14

Principes

KAFAQHSS..L.K..CHY.RTHIGE ... CNQCGKAF...S..Q.HG..........YHMCQFHCRYVNNHSGE ... HNQCGKAFPTPSHLQYHERT

score additif :scores élémentaires pour chaque paire (ex. log prob.)pénalités pour les trous

notations :

Deux séquences X = (X1,X2, . . . ,Xm) et Y = (Y1,Y2, . . . ,Yn)

s(x , y) le score d’alignement de la paire (x , y)

p la pénalité (fixe) associée à un trou, avec p > 0

S(i , j) le meilleur score d’alignement entre les séquences partielles(X1, . . . ,Xi ) et (Y1, . . . ,Yj)

meilleur = maximal9/14

Alignement global

∀ i , 0 ≤ i ≤ m , S(i , 0) = −i .p ,

∀ j , 0 ≤ j ≤ n , S(0, j) = −j .p ,

∀ i , j , 0 < i ≤ m , 0 < j ≤ n , S(i , j) = max {

S(i − 1, j − 1) + s(Xi ,Yj) , alignement de la paire (Xi ,Yj)

S(i − 1, j)− p , trou dans Y

S(i , j − 1)− p trou dans X

}

meilleur score d’alignement global = S(m, n).

10/14

Alignement global

∀ i , 0 ≤ i ≤ m , S(i , 0) = −i .p , ABCDABCD

∀ j , 0 ≤ j ≤ n , S(0, j) = −j .p ,

∀ i , j , 0 < i ≤ m , 0 < j ≤ n , S(i , j) = max {

S(i − 1, j − 1) + s(Xi ,Yj) , alignement de la paire (Xi ,Yj)

S(i − 1, j)− p , trou dans Y

S(i , j − 1)− p trou dans X

}

meilleur score d’alignement global = S(m, n).

10/14

Alignement global

∀ i , 0 ≤ i ≤ m , S(i , 0) = −i .p , ABCDABC.

∀ j , 0 ≤ j ≤ n , S(0, j) = −j .p ,

∀ i , j , 0 < i ≤ m , 0 < j ≤ n , S(i , j) = max {

S(i − 1, j − 1) + s(Xi ,Yj) , alignement de la paire (Xi ,Yj)

S(i − 1, j)− p , trou dans Y

S(i , j − 1)− p trou dans X

}

meilleur score d’alignement global = S(m, n).

10/14

Alignement global

∀ i , 0 ≤ i ≤ m , S(i , 0) = −i .p , ABC.ABCD

∀ j , 0 ≤ j ≤ n , S(0, j) = −j .p ,

∀ i , j , 0 < i ≤ m , 0 < j ≤ n , S(i , j) = max {

S(i − 1, j − 1) + s(Xi ,Yj) , alignement de la paire (Xi ,Yj)

S(i − 1, j)− p , trou dans Y

S(i , j − 1)− p trou dans X

}

meilleur score d’alignement global = S(m, n).

10/14

Alignement global

∀ i , 0 ≤ i ≤ m , S(i , 0) = −i .p ,

∀ j , 0 ≤ j ≤ n , S(0, j) = −j .p ,

∀ i , j , 0 < i ≤ m , 0 < j ≤ n , S(i , j) = max {

S(i − 1, j − 1) + s(Xi ,Yj) , alignement de la paire (Xi ,Yj)

S(i − 1, j)− p , trou dans Y

S(i , j − 1)− p trou dans X

}

meilleur score d’alignement global = S(m, n).

10/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G TA C C T

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0

← -2 ← -4 ← -6 ← -8

A

↑-2↖ 1 ← -1 ← -3 ← -5

C

↑-4

↑-1↖ 2 ← 0↖ ← -2

G

↑-6

↑-3

↑0 ← -2↑ ← -4

T

↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

.

A

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2

← -4 ← -6 ← -8

A

↑-2↖ 1 ← -1 ← -3 ← -5

C

↑-4

↑-1↖ 2 ← 0↖ ← -2

G

↑-6

↑-3

↑0 ← -2↑ ← -4

T

↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

. .

A C

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4

← -6 ← -8

A

↑-2↖ 1 ← -1 ← -3 ← -5

C

↑-4

↑-1↖ 2 ← 0↖ ← -2

G

↑-6

↑-3

↑0 ← -2↑ ← -4

T

↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

. . .

A C C

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6

← -8

A

↑-2↖ 1 ← -1 ← -3 ← -5

C

↑-4

↑-1↖ 2 ← 0↖ ← -2

G

↑-6

↑-3

↑0 ← -2↑ ← -4

T

↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

. . . .

A C C T

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A

↑-2↖ 1 ← -1 ← -3 ← -5

C

↑-4

↑-1↖ 2 ← 0↖ ← -2

G

↑-6

↑-3

↑0 ← -2↑ ← -4

T

↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G T. . . .

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2

↖ 1 ← -1 ← -3 ← -5

C↑-4

↑-1↖ 2 ← 0↖ ← -2

G↑-6

↑-3

↑0 ← -2↑ ← -4

T↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

AA

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1

← -1 ← -3 ← -5

C↑-4

↑-1↖ 2 ← 0↖ ← -2

G↑-6

↑-3

↑0 ← -2↑ ← -4

T↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A CA .

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1

← -1 ← -3 ← -5

C↑-4

↑-1

↖ 2 ← 0↖ ← -2

G↑-6

↑-3

↑0 ← -2↑ ← -4

T↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C GA . .

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1

← -1 ← -3 ← -5

C↑-4

↑-1

↖ 2 ← 0↖ ← -2

G↑-6

↑-3

↑0 ← -2↑ ← -4

T↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G TA . . .

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1

← -1 ← -3 ← -5

C↑-4

↑-1

↖ 2 ← 0↖ ← -2

G↑-6

↑-3

↑0 ← -2↑ ← -4

T↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A .A C

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1

← -3 ← -5

C↑-4

↑-1

↖ 2 ← 0↖ ← -2

G↑-6

↑-3

↑0 ← -2↑ ← -4

T↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A CA C

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1

← -3 ← -5

C↑-4

↑-1↖ 2

← 0↖ ← -2

G↑-6

↑-3

↑0 ← -2↑ ← -4

T↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G TA C . .

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1

← -3 ← -5

C↑-4

↑-1↖ 2

← 0↖ ← -2

G↑-6

↑-3

↑0

← -2↑ ← -4

T↑-8

↑-5

↑-2

← -4↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A . .A C C

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3

← -5

C↑-4

↑-1↖ 2

← 0↖ ← -2

G↑-6

↑-3

↑0

← -2↑ ← -4

T↑-8

↑-5

↑-2

← -4↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C .A C C

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3

← -5

C↑-4

↑-1↖ 2 ← 0

↖ ← -2

G↑-6

↑-3

↑0

← -2↑ ← -4

T↑-8

↑-5

↑-2

← -4↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C . A . CA C C A C C

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3

← -5

C↑-4

↑-1↖ 2 ← 0↖

← -2

G↑-6

↑-3

↑0

← -2↑ ← -4

T↑-8

↑-5

↑-2

← -4↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G .A C . C

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3

← -5

C↑-4

↑-1↖ 2 ← 0↖

← -2

G↑-6

↑-3

↑0 ← -2

↑ ← -4↑

T↑-8

↑-5

↑-2

← -4↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G . A C . GA C . C A C C .

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3

← -5

C↑-4

↑-1↖ 2 ← 0↖

← -2

G↑-6

↑-3

↑0 ← -2↑

← -4↑

T↑-8

↑-5

↑-2

← -4↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G . A C . G A . C GA C . C A C C . A C C .

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3

← -5

C↑-4

↑-1↖ 2 ← 0↖

← -2

G↑-6

↑-3

↑0 ← -2↑

← -4↑

T↑-8

↑-5

↑-2

← -4↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G T .A C . . C

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3

← -5

C↑-4

↑-1↖ 2 ← 0↖

← -2

G↑-6

↑-3

↑0 ← -2↑

← -4↑

T↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G T . A C G . T A x x G TA C . . C A C . C . A C C . .

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3

← -5

C↑-4

↑-1↖ 2 ← 0↖

← -2

G↑-6

↑-3

↑0 ← -2↑

← -4↑

T↑-8

↑-5

↑-2 ← -4

↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C . . A . C .A C C T A C C T

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3 ← -5

C↑-4

↑-1↖ 2 ← 0↖ ← -2

G↑-6

↑-3

↑0 ← -2↑

← -4↑

T↑-8

↑-5

↑-2 ← -4

↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G . . A x x G . A x x . GA C . C T A C C . T A C C T .

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3 ← -5

C↑-4

↑-1↖ 2 ← 0↖ ← -2

G↑-6

↑-3

↑0 ← -2↑ ← -4

T↑-8

↑-5

↑-2 ← -4

↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G . T A C . G T A . C G TA C . C T A C C . T A C C . T

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3 ← -5

C↑-4

↑-1↖ 2 ← 0↖ ← -2

G↑-6

↑-3

↑0 ← -2↑ ← -4

T↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G . T A C . G T A . C G TA C . C T A C C . T A C C . T

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3 ← -5

C↑-4

↑-1↖ 2 ← 0↖ ← -2

G↑-6

↑-3

↑0 ← -2↑ ← -4

T↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G . T A C . G T A . C G TA C . C T A C C . T A C C . T

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3 ← -5

C↑-4

↑-1↖ 2 ← 0↖ ← -2

G↑-6

↑-3

↑0 ← -2↑ ← -4

T↑-8

↑-5

↑-2 ← -4

↑ ↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1)

: traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G . TA C . C T

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3 ← -5

C↑-4

↑-1↖ 2 ← 0

← -2G↑-6

↑-3

↑0 ← -2

← -4

T↑-8

↑-5

↑-2 ← -4

↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1)

: traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G . TA C . C T

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3 ← -5

C↑-4

↑-1↖ 2 ← 0

← -2G↑-6

↑-3

↑0 ← -2

← -4

T↑-8

↑-5

↑-2 ← -4

↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G . TA C . C T

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3 ← -5

C↑-4

↑-1↖ 2 ← 0

← -2G↑-6

↑-3

↑0 ← -2

← -4

T↑-8

↑-5

↑-2 ← -4

↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G . TA C . C T

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3 ← -5

C↑-4

↑-1↖ 2 ← 0

← -2G↑-6

↑-3

↑0 ← -2

← -4

T↑-8

↑-5

↑-2 ← -4

↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G . TA C . C T

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3 ← -5

C↑-4

↑-1↖ 2 ← 0

← -2G↑-6

↑-3

↑0 ← -2

← -4

T↑-8

↑-5

↑-2 ← -4

↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G . TA C . C T

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3 ← -5

C↑-4

↑-1↖ 2 ← 0

← -2G↑-6

↑-3

↑0 ← -2

← -4

T↑-8

↑-5

↑-2 ← -4

↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G . TA C . C T

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3 ← -5

C↑-4

↑-1↖ 2 ← 0

← -2G↑-6

↑-3

↑0 ← -2

← -4

T↑-8

↑-5

↑-2 ← -4

↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

L’algorithme de Needleman et Wunsch

calcul de S(m, n) par programmation dynamique,

ie. tabulation : S[i][j], ex. :

A C G . TA C . C T

p = 2s(x , x) = 1s(x , !x) = −5

A C C T0 ← -2 ← -4 ← -6 ← -8

A↑-2↖ 1 ← -1 ← -3 ← -5

C↑-4

↑-1↖ 2 ← 0

← -2G↑-6

↑-3

↑0 ← -2

← -4

T↑-8

↑-5

↑-2 ← -4

↖ -1

coût en O(m × n).

T[i][j] = (i-1,j-1) | (i-1,j) | (i,j-1) : traceback

11/14

Pénalité affinepénalité cumulée de k trous consécutifs :popen + (k − 1) ∗ pextend , avec popen > pextend > 0

∀ i , j , 0 < i ≤ m , 0 < j ≤ n ,

T1(i , j) = max { score avec trou face à XiS(i − 1, j)− popen , Xi−1 et Yj sont alignésT1(i − 1, j)− pextend prolonge trou face à Xi−1

} ,T2(i , j) = max { score avec trou face à Yi

S(i , j − 1)− popen , Xi et Yj−1 sont alignésT2(i , j − 1)− pextend prolonge trou face à Yj−1

} ,S(i , j) = max {

S(i − 1, j − 1) + s(Xi ,Yj) , alignement de (Xi ,Yj)T1(i , j) , trou dans YT2(i , j) trou dans X

}.

12/14

Pénalité affinepénalité cumulée de k trous consécutifs :popen + (k − 1) ∗ pextend , avec popen > pextend > 0

∀ i , j , 0 < i ≤ m , 0 < j ≤ n ,T1(i , j) = max { score avec trou face à Xi

S(i − 1, j)− popen , Xi−1 et Yj sont alignésT1(i − 1, j)− pextend prolonge trou face à Xi−1

} ,T2(i , j) = max { score avec trou face à Yi

S(i , j − 1)− popen , Xi et Yj−1 sont alignésT2(i , j − 1)− pextend prolonge trou face à Yj−1

} ,S(i , j) = max {

S(i − 1, j − 1) + s(Xi ,Yj) , alignement de (Xi ,Yj)T1(i , j) , trou dans YT2(i , j) trou dans X

}.

12/14

Pénalité affinepénalité cumulée de k trous consécutifs :popen + (k − 1) ∗ pextend , avec popen > pextend > 0

∀ i , j , 0 < i ≤ m , 0 < j ≤ n ,T1(i , j) = max { score avec trou face à Xi

S(i − 1, j)− popen , Xi−1 et Yj sont alignés

T1(i − 1, j)− pextend prolonge trou face à Xi−1} ,

T2(i , j) = max { score avec trou face à YiS(i , j − 1)− popen , Xi et Yj−1 sont alignésT2(i , j − 1)− pextend prolonge trou face à Yj−1

} ,S(i , j) = max {

S(i − 1, j − 1) + s(Xi ,Yj) , alignement de (Xi ,Yj)T1(i , j) , trou dans YT2(i , j) trou dans X

}.

12/14

Pénalité affinepénalité cumulée de k trous consécutifs :popen + (k − 1) ∗ pextend , avec popen > pextend > 0

∀ i , j , 0 < i ≤ m , 0 < j ≤ n ,T1(i , j) = max { score avec trou face à Xi

S(i − 1, j)− popen , Xi−1 et Yj sont alignésT1(i − 1, j)− pextend prolonge trou face à Xi−1

} ,

T2(i , j) = max { score avec trou face à YiS(i , j − 1)− popen , Xi et Yj−1 sont alignésT2(i , j − 1)− pextend prolonge trou face à Yj−1

} ,S(i , j) = max {

S(i − 1, j − 1) + s(Xi ,Yj) , alignement de (Xi ,Yj)T1(i , j) , trou dans YT2(i , j) trou dans X

}.

12/14

Pénalité affinepénalité cumulée de k trous consécutifs :popen + (k − 1) ∗ pextend , avec popen > pextend > 0

∀ i , j , 0 < i ≤ m , 0 < j ≤ n ,T1(i , j) = max { score avec trou face à Xi

S(i − 1, j)− popen , Xi−1 et Yj sont alignésT1(i − 1, j)− pextend prolonge trou face à Xi−1

} ,T2(i , j) = max { score avec trou face à Yi

S(i , j − 1)− popen , Xi et Yj−1 sont alignésT2(i , j − 1)− pextend prolonge trou face à Yj−1

} ,S(i , j) = max {

S(i − 1, j − 1) + s(Xi ,Yj) , alignement de (Xi ,Yj)T1(i , j) , trou dans YT2(i , j) trou dans X

}.

12/14

Pénalité affinepénalité cumulée de k trous consécutifs :popen + (k − 1) ∗ pextend , avec popen > pextend > 0

∀ i , j , 0 < i ≤ m , 0 < j ≤ n ,T1(i , j) = max { score avec trou face à Xi

S(i − 1, j)− popen , Xi−1 et Yj sont alignésT1(i − 1, j)− pextend prolonge trou face à Xi−1

} ,T2(i , j) = max { score avec trou face à Yi

S(i , j − 1)− popen , Xi et Yj−1 sont alignés

T2(i , j − 1)− pextend prolonge trou face à Yj−1} ,

S(i , j) = max {S(i − 1, j − 1) + s(Xi ,Yj) , alignement de (Xi ,Yj)T1(i , j) , trou dans YT2(i , j) trou dans X

}.

12/14

Pénalité affinepénalité cumulée de k trous consécutifs :popen + (k − 1) ∗ pextend , avec popen > pextend > 0

∀ i , j , 0 < i ≤ m , 0 < j ≤ n ,T1(i , j) = max { score avec trou face à Xi

S(i − 1, j)− popen , Xi−1 et Yj sont alignésT1(i − 1, j)− pextend prolonge trou face à Xi−1

} ,T2(i , j) = max { score avec trou face à Yi

S(i , j − 1)− popen , Xi et Yj−1 sont alignésT2(i , j − 1)− pextend prolonge trou face à Yj−1

} ,

S(i , j) = max {S(i − 1, j − 1) + s(Xi ,Yj) , alignement de (Xi ,Yj)T1(i , j) , trou dans YT2(i , j) trou dans X

}.

12/14

Pénalité affinepénalité cumulée de k trous consécutifs :popen + (k − 1) ∗ pextend , avec popen > pextend > 0

∀ i , j , 0 < i ≤ m , 0 < j ≤ n ,T1(i , j) = max { score avec trou face à Xi

S(i − 1, j)− popen , Xi−1 et Yj sont alignésT1(i − 1, j)− pextend prolonge trou face à Xi−1

} ,T2(i , j) = max { score avec trou face à Yi

S(i , j − 1)− popen , Xi et Yj−1 sont alignésT2(i , j − 1)− pextend prolonge trou face à Yj−1

} ,S(i , j) = max {

S(i − 1, j − 1) + s(Xi ,Yj) , alignement de (Xi ,Yj)T1(i , j) , trou dans YT2(i , j) trou dans X

}.

12/14

Pénalité affinepénalité cumulée de k trous consécutifs :popen + (k − 1) ∗ pextend , avec popen > pextend > 0

∀ i , j , 0 < i ≤ m , 0 < j ≤ n ,T1(i , j) = max { score avec trou face à Xi

S(i − 1, j)− popen , Xi−1 et Yj sont alignésT1(i − 1, j)− pextend prolonge trou face à Xi−1

} ,T2(i , j) = max { score avec trou face à Yi

S(i , j − 1)− popen , Xi et Yj−1 sont alignésT2(i , j − 1)− pextend prolonge trou face à Yj−1

} ,S(i , j) = max {

S(i − 1, j − 1) + s(Xi ,Yj) , alignement de (Xi ,Yj)

T1(i , j) , trou dans YT2(i , j) trou dans X

}.

12/14

Pénalité affinepénalité cumulée de k trous consécutifs :popen + (k − 1) ∗ pextend , avec popen > pextend > 0

∀ i , j , 0 < i ≤ m , 0 < j ≤ n ,T1(i , j) = max { score avec trou face à Xi

S(i − 1, j)− popen , Xi−1 et Yj sont alignésT1(i − 1, j)− pextend prolonge trou face à Xi−1

} ,T2(i , j) = max { score avec trou face à Yi

S(i , j − 1)− popen , Xi et Yj−1 sont alignésT2(i , j − 1)− pextend prolonge trou face à Yj−1

} ,S(i , j) = max {

S(i − 1, j − 1) + s(Xi ,Yj) , alignement de (Xi ,Yj)T1(i , j) , trou dans Y

T2(i , j) trou dans X}.

12/14

Pénalité affinepénalité cumulée de k trous consécutifs :popen + (k − 1) ∗ pextend , avec popen > pextend > 0

∀ i , j , 0 < i ≤ m , 0 < j ≤ n ,T1(i , j) = max { score avec trou face à Xi

S(i − 1, j)− popen , Xi−1 et Yj sont alignésT1(i − 1, j)− pextend prolonge trou face à Xi−1

} ,T2(i , j) = max { score avec trou face à Yi

S(i , j − 1)− popen , Xi et Yj−1 sont alignésT2(i , j − 1)− pextend prolonge trou face à Yj−1

} ,S(i , j) = max {

S(i − 1, j − 1) + s(Xi ,Yj) , alignement de (Xi ,Yj)T1(i , j) , trou dans YT2(i , j) trou dans X

}.12/14

Alignement local : Smith et Watermanautoriser un décalage initial nouvelles initialisations

∀ i , 0 ≤ i ≤ m , S(i , 0) = 0 ,∀ j , 0 ≤ j ≤ n , S(0, j) = 0 .

valeurs négatives remises à zéro

max {0,...

}.

autoriser un décalage final solution

max {S(i , n) , ∀ i , 0 ≤ i ≤ m ,S(m, j) , ∀ j , 0 ≤ j ≤ n

}.

13/14

Alignement local : Smith et Watermanautoriser un décalage initial nouvelles initialisations

∀ i , 0 ≤ i ≤ m , S(i , 0) = 0 ,∀ j , 0 ≤ j ≤ n , S(0, j) = 0 .

valeurs négatives remises à zéro

max {0,...

}.

autoriser un décalage final solution

max {S(i , n) , ∀ i , 0 ≤ i ≤ m ,S(m, j) , ∀ j , 0 ≤ j ≤ n

}.

13/14

Alignement local : Smith et Watermanautoriser un décalage initial nouvelles initialisations

∀ i , 0 ≤ i ≤ m , S(i , 0) = 0 ,∀ j , 0 ≤ j ≤ n , S(0, j) = 0 .

valeurs négatives remises à zéro

max {0,...

}.

autoriser un décalage final solution

max {S(i , n) , ∀ i , 0 ≤ i ≤ m ,S(m, j) , ∀ j , 0 ≤ j ≤ n

}.

13/14

autres méthodes (heuristiques) : FASTA et BLASTdiagonales dans le dotplot screening : recherche de séquences courtes (≡ hachage)extensions par les deux boutsraccordement des diagonales

matrices de scores pour les protéines : PAM et BLOSUMstatistiques sur des mutations (séquences alignées)BLOSUM = base plus large

14/14