Alignement de séquences (suite)
Nadia El-Mabrouk
Graphe d’édition pour l’alignement de séquences
b a a
0 1 2 3
a 1 1 1 2
b 2 1 2 2
q
f 1
2
b e
[ ] [ ]
a e[ ]
a ea e
[ ] [ ]
a e b e[ ]
b e
[ ]
a e[ ]
a e[ ]
a e
[ ] [ ]
a e[ ]
a eb e
[ ] [ ]
b e[ ]
b e a e[ ]
b e
[ ]
[ ]
b b[ ]
b b[ ]
b b[ ]
a a[ ]
a a[ ]
a bGraphe orienté, dont les arêtes sont étiquetées.
S
T
|S| = m, |T| = n.
• Correspondance bijective entre les alignements de S avec T et les chemins de q= (0,0) à f= (m,n).
• D(i,j): Valeur maximale d’un chemin de q= (0,0) au sommet (i,j) . Trouver la valeur maximale D(m,n) d’un chemin de q=
(0,0) à f= (m,n).
D(0,0) = 0;
Pour j = 1 à n faire
D(0,j) = D(0,j) + v( );
Pour i=1 à m faire
{ D(i,0) = D(i-1,0) + v ( );
Pour j=1 à n faire
D(i,j) = max {D(i-1,j) + v( ) , D(i,j-1) + v ( ), D(i-1,j-1)+ v ( )}
}
Retourner (D(m,n));
Te j
[ ]
Si
[ ]
eTe j
[ ]
TjSi
[ ]
Expression régulière
• Aligner S = « AT » avec R = « (A|C)T(T|G) »
A
C
T
T
G
q f
On note Q l’ensemble des états de l’automate
On note l (q) l’étiquette d’un état q.
Expression régulière
A
C
T
T
G A
C
T
T
G A
C
T
T
G
A
T
e e
[ ] [ ]
A eC e
[ ]
T e
]
[ [
T e]
G e
] [
e e
[ ]
e e
[ ]
e e
[ ] [ ]
e ee e
[ ]
• Aligner (A|C)T(T|G) avec AT
(0,q)
(m, f)
Expression régulière
• Aligner S = « AT » avec R = « (A|C)T(T|G) »
A
C
T
T
G A
C
T
T
G A
C
T
T
G
A
T
A A
[ ]
e A[ ]
C A
[ ]
e C
[ ]
e e
[ ] [ ]
A eC e
[ ]
T e
]
[ [
T e]
G e
] [
e e
[ ]
e e
[ ]
e e
[ ] [ ]
e ee e
[ ]
(0,q)
(m, f)
Expression régulière
• Aligner S = « AT » avec R = « (A|C)T(T|G) »
A
C
T
T
G A
C
T
T
G A
C
T
T
G
A
T
A A
[ ]
e A[ ]
C A
[ ]
e C
[ ]
e e
[ ] [ ]
A eC e
[ ]
T e
]
[ [
T e]
G e
] [
e e
[ ]
e e
[ ]
e e
[ ] [ ]
e ee e
[ ]
(0,q)
(m, f)
• Correspondance bijective entre les alignements de S avec les mots de L(R) et les chemins de q= (0,0) à f= (m,n).
D(0, q) = 0;
Pour q in Q-{q} en ordre topologique faire D(0,q) = max t q {D(0,t) + v( )};
Pour i=1 à m faire
{ D(i, q) = D(i-1, q) + v ( );
Pour q in Q-{q} en ordre topologique faire { D(i,q) = max t q {D(i,t) + v( )};
Si l(q) ≠ e alors
D(i,q) = max {max {D(i,q), D(i-1,q) + v( ), maxt q {D(i-1,t) + v( )};
}
Pour q in Q-{q} en ordre topologique faire
D(i,q) = max {D(i,q), maxt (≠ q) q {D(i,t) + v( )};
}
Retourner (D(m,f));
Si
[ ]
el(q)e
[ ]
l(q)e
[ ]
l(q)Si
[ ]
l(q)e
[ ]
Recherche de R dans S à k erreurs près
D(0, q) = 0;
Pour q in Q-{q} en ordre topologique faire D(0,q) = max t q {D(0,t) + v( )};
Pour i=1 à m faire
{ D(i, q) = D(i-1, q) + v ( );
Pour q in Q-{q} en ordre topologique faire { D(i,q) = max t q {D(i,t) + v( )};
Si l(q) ≠ e alors
D(i,q) = max {max {D(i,q), D(i-1,q) + v( ), maxt q {D(i-1,t) + v( )};
}
Pour q in Q-{q} en ordre topologique faire
D(i,q) = max {D(i,q), maxt (≠ q) q {D(i,t) + v( )};
}
Retourner (D(m,f));
Si
[ ]
el(q)e
[ ]
l(q)e
[ ]
l(q)Si
[ ]
l(q)e
[ ]
Recherche de R dans S à k erreurs près
D(0, q) = 0;
Pour q in Q-{q} en ordre topologique faire D(0,q) = max t q {D(0,t) + v( )};
Pour i=1 à m faire
{ D(i, q) = max {0, D(i-1, q) + v ( )};
Pour q in Q-{q} en ordre topologique faire { D(i,q) = max t q {D(i,t) + v( )};
Si l(q) ≠ e alors
D(i,q) = max {max {D(i,q), D(i-1,q) + v( ), maxt q {D(i-1,t) + v( )};
}
Pour q in Q-{q} en ordre topologique faire
D(i,q) = max {D(i,q), maxt (≠ q) q {D(i,t) + v( )};
}
Retourner (D(m,f));
Si
[ ]
e l(q)e[ ]
l(q)e
[ ]
l(q)Si
[ ]
l(q)e
[ ]
Recherche de R dans S à k erreurs près
D(0, q) = 0;
Pour q in Q-{q} en ordre topologique faire D(0,q) = max t q {D(0,t) + v( )};
Pour i=1 à m faire
{ D(i, q) = max {0, D(i-1, q) + v ( )};
Pour q in Q-{q} en ordre topologique faire { D(i,q) = max t q {D(i,t) + v( )};
Si l(q) ≠ e alors
D(i,q) = max {max {D(i,q), D(i-1,q) + v( ), maxt q {D(i-1,t) + v( )};
}
Pour q in Q-{q} en ordre topologique faire
D(i,q) = max {D(i,q), maxt (≠ q) q {D(i,t) + v( )};
}
Retourner toutes le positions i telles que (D(i,f)) ≤ k;
Si
[ ]
e l(q)e[ ]
l(q)e
[ ]
l(q)Si
[ ]
l(q)e
[ ]
Conclusion
• Alignement global de deux séquences S et T (|S|
≈ |T| = n)
–
Distance d’édition (Levenshtein) ou valeur de similarité.
–
Algorithme de programmation dynamique en O(n
2) en temps et en espace.
– Algorithme de Hirschberg: stratégie « Diviser pour Reigner ». O(n
2) en temps et O(n) en espace.
–
Optimisation en temps: calculer la table autour d’une bande. Temps et espace O(kn) où k est la distance
d’édition.
Conclusion
• Alignement local de deux séquences S et T (|S| ≈ |T| = n)
– Valeur de similarité seulement.
– Algorithme de programmation dynamique en
O(n
2) en temps et en espace.
Conclusion
• Généralisation de l’alignement local/global aux « gaps »
– Plutôt que de considérer chaque « indel » séparément, les regrouper en « gaps ».
– Dans le cas d’une pondération quelconque des
« gaps », algorithme O(n
3) en temps et en espace.
– Dans le cas d’une pondération affine, algorithme
en O(n
2).
Conclusion
• Recherche d’une séquence S dans une
séquence T à k erreurs près (|S|=m, |T| = n, m
<< n)
– Distance d’édition (Levenshtein) ou valeur de similarité.
– Algorithme de programmation dynamique en
O(mn) en temps et en espace.
Conclusion
• Alignement d’un texte S avec une expression régulière R (|S|≈|R| = n)
–
Algorithme de programmation dynamique en O(n
2) en temps et en espace.
• Recherche d’une expression régulière R dans un texte S à k erreurs près (|S|= n, |R| = m, n>>m)
–