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 met n(m<n). Exprimer en fonction
de net mle nombre d’alignements distincts possibles. On considèrera les alignements : −x
y−!et x−
−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 Set Tde longueur met 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 Savec tous les
préfixes de T. Quelle est sa complexité en nombre de comparaisons. Même chose pour un alignement entre un
suffixe de Set 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 xet ypar :
optimal x
y!
alors on a les deux choix suivants :
optimal s[1..i −1]
t[1..j −1] !+s[i]
t[j]+optimal s[i+ 1..m]
t[j+ 1..n]!
et
optimal s[1..i −1]
t[1..j]!+s[i]
−
+optimal s[i+ 1..m]
t[j+ 1..n]!
Montrez que quand on connait ialors on peut trouver jde manière linéaire en espace.
(c) Comprendre alors l’algorithme suivant Align(1,m,1,n) qui construit l’alignement optimal avec une utilisa-
tion de la mémoire linéaire en mou n.
Remarque : on peut partir du milieu ide 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)
Voici le programme correspondant (d’après le livre : Introduction to Computational Molecular Biology) :
1
(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 Ipositions 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
8 janvier 2003 TD5 Algorithmes et Complexité 2