• Aucun résultat trouvé

TP 3 : distance d’édition

N/A
N/A
Protected

Academic year: 2022

Partager "TP 3 : distance d’édition"

Copied!
2
0
0

Texte intégral

(1)

TP 3 : distance d’édition

Judicaël Courant

Le 28 mars 2016

1 Introduction

On se donne unalphabetA, c’est-à-dire un ensemble fini, par exempleA={A, T, G, C}. On appelle lettres les éléments de l’alphabet. On appelle mot sur cet alphabet une séquence finie de lettres par exemple AACGT C et longueur de ce mot le nombre de lettres dans la séquence.

On note A l’ensemble des mots sur l’alphabet A. La longueur d’un motm est notée |m|. Par exemple |AACGT C|= 6. On appelle mot vide le mot de longueur0et on le note .

On appelle opération élémentaire d’édition une opération consistant à :

— insérer une lettre dans un mot (cette insertion peut se faire au début, à la fin ou à toute position arbitraire du mot) ;

— supprimer une lettre d’un mot (de même, cette suppression peut avoir lieu n’importe où) ;

— changer laie lettre d’un mot en une autre lettre (de même cette transformation peut se faire n’importe où).

On appelle distance d’édition entre deux mots x ety et on note de(x, y) le nombre minimal d’opérations élémentaires d’édition nécessaires pour transformer x eny.

de est une distance au sens où on a :

∀x, y∈ A de(x, y) = 0 ⇐⇒ x=y (1)

∀x, y∈ A de(x, y) =de(y, x) (2)

∀x, y, z ∈ A de(x, z)≤de(x, y) +de(y, z) (3) On appelle distance de Levenshtein entre deux mots x et y la distance d`, vérifiant, pour toutes lettres aetb et tous motsx ety

d`(x, ) =|x| (4)

d`(, y) =|y| (5)

d`(xa, yb) = min(1 +d`(x, yb),1 +d`(xa, y), d`(x, y) +ca,b) (6) où ca,b vaut 0si a=bet1 sinon.

On admettra que pour tout couple de mots (x, y), d`(x, y) =de(x, y). En fait, les deux dis- tances sont souvent présentées comme une seule et même distance mais si l’inégalité de(x, y)≤ d`(x, y) se démontre facilement, démontrer l’inégalité inverse est beaucoup plus délicate.

cba Cette œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International.

1

(2)

Option informatique MPSI La Martinière Monplaisir 2015-2016

2 Travail demandé

Pour représenter les mots, on peut utiliser le type Caml string. Il est utile d’une part de savoir que s.[i] désigne le caractère numéro i de la chaîne de caractère s, et d’autre part de lire la documentation de sub_string. L’accès à un caractère d’une chaîne se fait en temps constant, le calcul d’une sous-chaîne parsub_string se fait en temps proportionnel à la chaîne de caractère résultat.

1. Réaliser une fonctiondistance1 : string -> string -> int calculant la distance d’édi- tion entre deux mots de façon récursive naïve. La tester.

2. Il est raisonnable de penser que le temps de calcul dedistance1 u vdépend des longueurs respectives des motsuetv mais pas de leurs contenus. Pourquoi ?

3. Pour (p, q) ∈ N2, on noteC(p, q) le temps de calcul de distance1 u v pour u etv des mots de longueurs respectivesp etq. Montrer

C1(p, q) =C1(p−1, q) +C1(p, q−1) +C1(p−1, q−1) + Θ(p+q) (7) 4. On peut faire un peu mieux : au lieu de représenter un motmpar une chaîne de caractère, on le représente par un couple (s, k) : string * int. Ce couple représente le mot m formé deskpremières lettres des. Pour accéder au caractère numéroide ce mot, on pourra comme précédemment utilisers.[i]. Quant au motmprivé de sa dernière lettre, on peut le représenter par (s, k−1), qui se calcule en temps constant (donc plus rapidement qu’en utilisantsub_string. On pose donc :

t y p e mot == s t r i n g * int ;;

Écrire une nouvelle fonctiondistance2 : mot -> mot -> int calculant la distance d’édi- tion entre deux mots et telle que, en notantC2(p, q) le temps de calcul de distance2 u vpour u etv de longueurs respectivespetq, on a

C2(p, q) =C2(p−1, q) +C2(p, q−1) +C2(p−1, q−1) + Θ(1) (8) 5. Montrer qu’on a alorsC2(n, n) = Ω(3n). En particulier, le temps de calcul dedistance2

u vest exponentiel en nlorsque uetv sont de longueur n.

6. Réaliser une fonctiondistance_memo : mot -> mot -> int, telle que pour deux motsuet v de longueurs respectives p etq,distance memo u v calcule la distance d’édition de u etven utilisant l’algorithme suivant :

— on crée une matrice t de taille (p+ 1)×(q+ 1) (avec des indices commençant à 0, voir la documentation du module vect) ;

— pour(i, j)∈[[0, p]]×[[0, q]], on met, danst.(i).(j), la distance deui àvj, où ui (resp.

vj) désigne le mot constitué des i(resp.j) premières lettres deu (resp. dev) ;

— on retournet.(p).(q).

7. Quelle est la complexité en temps de cette fonction ? 8. Quelle est sa complexité en mémoire ?

9. Réaliser une fonction distance_opt effectuant le même calcul, avec la même complexité en temps, mais pouvant tourner dans un espace mémoireO(min(p, q))pour le calcul de la distance de deux mots de longueurs respectivesp etq.

2

Références

Documents relatifs

[r]

Faire les calculs dans la place ci-dessous... Faire les calculs dans la

Comme on l'a déjà mentionné, les problèmes dans NP sont en général plus difficiles à résoudre (du point de vue du temps de calcul) que les problèmes dans P, mais on verra dans

Pour simplifier, nous considérerons que ces deux points sont à la même

dépendante, celle qu’on ne contrôle pas en laboratoire) en premier on la fait suivre des mots « en fonction de » et on termine en nommant la variable inscrite sur l’axe des « x »

Ces deux distances sont fondamentalement différentes : la première n'est qu'une stricte comparaison, caractère à caractère, des deux mots, alors que la seconde prend en compte de

montre tout d'abord que pour obtenir le minimum de la forme linéaire W sous les contraintes (7) on peut se restreindre aux valeurs de W sur les sommets du cube unité situés dans

Les principales options du format de la commande /usr/bin/time sont r´ esum´ ees dans la table tab..