Pour perspective, partons de l'algorithme naïf et le calcul de son complexité. L'algorithme naïf cherche un mot x de longueur |x|=m dans un texte y de longueur |y|=n. Il étudie tous les cas possibles, en comparant x au contenu d'une fenêtre glissante sur y de longueur m.
Procedure naive (x, m, y, n) pour j <- 0 à (n-m) faire reponse <- vrai i <- 0 tant que reponse = vrai et i < (m-1) faire si x[j+i] <> y[i] alors reponse = faux i <- i+1 fin tant que si reponse = vrai, afficher "alignement trouvé pour décalage " + j fin pour
O(n m) ( O((n-m)*m) plus exactement) dans le cas où tous les tests doivent être réalisés parce que x et y sont des puissances de la même lettre. On exécute les deux boucles, internes et externes, pleinement. Pour |y| = 1, ça reste O(n); le pire des cas est pour m = n/2 : n2/2.
| Rappel |
|---|
| Si q est une probabilité, |q| < 1, les séries \sum_{k=0}^{\infty} q^k |
| et leurs dérivées sont convergentes et leurs sommes valent |
| \sum_{k=0}^{\infty} q^k = \frac{1}{1-q} |
| \sum_{k=0}^{\infty} \left(q^k\right) \prime = \left(\frac{1}{1-q} \right) \prime = \frac{1}{\left( 1 - q \right)2} |
| La dérivée d'une série est égale à la dérivée de sa somme |
On constate que l'algorithme comparera la fenêtre au mot recherché n - m + 1 fois.
Combien de comparaisons de lettres de la fenêtre avec le texte, en moyenne?
Des similitude entre deux mots x et y de longueurs respectives m et n peuvent être visulaisées graphiquement en définissant une table Tr de taille m x n, appelée le tracé entre x et y. Les valeurs de la table Tr sont définies pour toute position i sur x et j sur y par Tr[i,j] = vrai si x[i]=y[j], faux sinon.
Pour visualiser le tracé, des detons (ou autre symbole) sur une grille sont utilisées pour signifier la valeur vrai. Les zones de similitude entre deux mots apparaissent alors comme des suites de jetons sur le diagonales de la grille.
Il est possible de déduire d'un tracé un alignement global entre les deux mots en joignant des suites de jetons:
Les alignements globaux correspondent alors à des chemins commençant à proximité du coin supérieur gaugche et se terminant à proximité du coin inférieur droit.
Donner le tracé entre X = ACGT et y = ATGCTACG. Déduire des propriétés entre x et y.
| A | T | G | C | T | A | C | G | |
|---|---|---|---|---|---|---|---|---|
| A | * | * | ||||||
| C | * | * | ||||||
| G | * | * | ||||||
| T | * | * |