La programmation dynamique et l edit-distance Christine Decaestecker (ULB) & Marco Saerens (UCL) LINF75 1 1
Programmation dynamique Nous avons un treilli: 3 3 3 1 1 1 0 3 4 3 1 3 0 3 1 5 3 3 1 3 LINF75 0
Programmation dynamique Quelques définitions Coût associé à la décision de passer à l état s=j au niveau k Etant donné que nous étions dans l état s=i au niveau k 1 LINF75 3
Programmation dynamique Coût total d un chemin Coût optimal à partir de l état s 0 LINF75 4
Programmation dynamique Coût optimal quel que soit l état de départ Coût optimal à partir d un état d un niveau quelconque LINF75 5
Programmation dynamique Relations de récurrence à appliquer: LINF75 6
Programmation dynamique Graphiquement: S = i+1 k+1 S = i k S = i k+1 S = i 1 k+1 LINF75 7
Programmation dynamique 0 Exemple: 5 1 4 3 1 4 4 3 1 4 4 5 LINF75 8 5
Programmation dynamique Démonstration LINF75 9
Programmation dynamique De manière symmétrique: LINF75 10
Programmation dynamique S il y a des sauts de niveau Où représente les états vers lesquels l on peut se rendre à partir LINF75 de s k = i 11
Programmation dynamique LINF75 1
Calcul de la distance entre deux chaînes de caractères Calcule le nombre minimal d insertions, de suppressions et de substitutions Pour passer d une chaîne de caractères x à une autre chaîne de caractères y LINF75 13
Egalement appelé distance de Levenstein Soit deux chaînes de caractères x i étant le i-ème caractère de la chaîne x LINF75 14
La longueur de la chaîne x est notée x En général, nous avons Une sous-chaîne est définie par LINF75 15
Nous allons lire un à un les caractères de la chaîne x pour construire progressivement la chaîne y Nous définissons pour ce faire trois opérations d édition: Insertion d un caractère dans y (sans piocher dans x) Suppression d un caractère de x (sans la concaténer à y) Substitution d un caractère de y par celle de x LINF75 16
Première convention: Signifie que nous avons lu les i 1 premiers caractères de x Et donc x est amputé de ses i 1 premiers caractères Nous les avons piochés pour alimenter y LINF75 17
Deuxième convention: Signifie que les j premiers caractères de y ont été transcrits Nous lisons donc progressivement des caractères de x pour écrire y LINF75 18
Il s agit d un processus à niveaux (étapes) et états Nous pourrons donc appliquer la programmation dynamique Un état est donc caractérisé par le couple (i, j) LINF75 19
Voici la définition des trois opérations Pour les deux premières opérations, on passe du niveau k au niveau k+1 Pour la dernière, on passe au niveau k+ (l on saute un niveau) LINF75 0
Nous représentons la situation par un tableau à deux dimensions Un niveau est représenté par (i + j) = cte Un état est représenté par (i, j) Une opération est représentée par une transition dans ce tableau LINF75 1
Exemple de tableau correspondant au calcul de la distance entre livre et lire LINF75
Un niveau correspond à une diagonale: (i + j) = cte LINF75 3
Nous introduisons un coût (ou pénalité) associé à chaque opération (insertion, suppression, substitution) Avec LINF75 4
Nous pouvons appliquer les formules de programmation dynamique: Initialement: Ensuite: LINF75 5
Et finalement: Cette valeur est appelée edit-distance ou distance de Levenstein LINF75 6
Exemple à traiter dist(lire, livre) = 1 LINF75 7
Si l on veut connaître le chemin optimal (séquence optimale des opérations) Il faut maintenir, pour chaque état, un pointeur vers l état d où l on vient dans un tableau Les informaticiens ont développé de nombreuses améliorations de cet algorithme (plus rapides) LINF75 8