recherche de motifs, alignement de séquences · exemples 1 chercherlecodonstart’atg’...
TRANSCRIPT
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
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