TD5 Algorithmes et Complexité Algorithmes sur les séquences

publicité
TD5 Algorithmes et Complexité
Algorithmes sur les séquences
Michel Van Caneghem
8 janvier 2003
1. Un alignement En utilisant un score de 1 pour une égalité, -1 pour une différence et -2 pour un gap, donnez les
meilleurs alignement globaux des 2 séquences suivantes :
AAAG
ACG
2. Alignement local Quel est le meilleur alignement local des 2 séquences suivantes :
ATACTACGGAGGG
GAACGTAGGCGTAT
On utilisera les mêmes paramètres que la question précédente.
3. Combien Vous avez vu en cours l’algorithme classique de programmation dynamique pour aligner deux séquences
d’ADN ou d’acides aminés. On cherche à aligner deux séquences de taille m et n (m < n). Exprimer
en fonction
!
!
− x
x −
de n et m le nombre d’alignements distincts possibles. On considèrera les alignements :
et
y −
− y
comme identiques.
4. L’algorithme de Hirschberg Il s’agit de l’algorithme qui permet de construire un alignement en utilisant un espace
linéaire.
(a) Soit deux séquences S et T de longueur m et n. Trouvez un algorithme qui utilise un espace au plus O(m) et
qui permet de calculer le score optimal de l’alignement d’une séquence qui est un préfixe de S avec tous les
préfixes de T . Quelle est sa complexité en nombre de comparaisons. Même chose pour un alignement entre un
suffixe de S et tous les suffixes de T .
(b) Pour comprendre l’algorithme, imaginons l’alignement optimal qui passe par le symbole s[i]. En face de ce
symbole on trouve soit le symbole t[j], soit un gap entre t[j] et t[j + 1]. Si on représente l’alignement optimal
entre x et y par :
!
x
optimal
y
alors on a les deux choix suivants :
optimal
s[1..i − 1]
t[1..j − 1]
!
s[1..i − 1]
t[1..j]
!
et
optimal
+
+
s[i]
+ optimal
t[j]
s[i]
+ optimal
−
s[i + 1..m]
t[j + 1..n]
!
s[i + 1..m]
t[j + 1..n]
!
Montrez que quand on connait i alors on peut trouver j de manière linéaire en espace.
(c) Comprendre alors l’algorithme suivant Align(1,m,1,n) qui construit l’alignement optimal avec une utilisation de la mémoire linéaire en m ou n.
Remarque : on peut partir du milieu i de la séquence s, on en déduit j. Et on rappelle récursivement
soit Align(1,i/2 - 1,1,j - 1) et Align(i/2 + 1,m,j + 1,n)
soit Align(1,i/2 - 1,1,j) et Align(i/2 + 1,m,j + 1,n)
(d) Notons T (m, n) le nombre de fois ou l’on appelle max dans la fonction "MeilleurScore". Montrez que :
T (m, n) <= mn + T (m/2, j) + T (m/2, n − j)
Puis par récurrence que T (m, n) <= 2mn) C’est à dire que l’on arrive à une utilisation d’un espace linéaire,
en ne faisant pas plus de 2 fois le nombre de comparaisons de l’algorithme qui utilise un espace mémoire en
O(mn).
5. Un petit programme Ecrire un programme qui réalise la rotation vers la gauche de I positions des N éléments d’un
tableau X.
rotation("ABCDEFGH",3) = "DEFGHABC"
Ce programme doit s’exécuter en un temps proportionnel à N, en utilisant seulement quelques mots de mémoire
supplémentaire.
Une aide : On peut remarquer que si l’on dispose du sous-programme renverse(i,j) qui renverse les éléments
du sous tableau X[i]...X[j] alors le programme est pratiquement fini.
ABCDEFGH ->
renverse(1,3) ->
CBADEFGH
CBADEFGH ->
renverse(3+1,8) ->
CBAHGFED
CBAHGFED ->
renverse(1,8) ->
DEFGHABC
Voici le programme correspondant (d’après le livre : Introduction to Computational Molecular Biology) :
1
8 janvier 2003
TD5 Algorithmes et Complexité
2
Téléchargement