Distance de Damerau-Levenshtein
# Distance de Damerau-Levenshtein

En informatique théorique, la distance de Damerau–Levenshtein est une distance entre deux chaînes de caractères. Elle porte les noms des chercheurs Frederick J. Damerau (en) et Vladimir Levenshtein, étant issue de leurs travaux sur les fautes d'orthographe courantes.

De manière informelle, l'évaluation de cette distance consiste à calculer le nombre minimum d'opérations nécessaires pour transformer une chaîne de caractères en une autre, où une opération est définie comme l'insertion, la suppression ou la substitution d'un simple caractère, ou comme une transposition de deux caractères adjacents.

Frederick J. Damerau a non seulement distingué ces quatre opérations d'édition, mais a aussi écrit qu'elles correspondent à plus de 80 % des fautes d'orthographe humaines. La distance d'édition a été introduite par Vladimir Levenshtein, qui a ensuite généralisé ce concept avec des opérations multiples d'édition, mais sans y inclure les transpositions. C'est donc la possibilité de transposition qui distingue la distance de Damerau–Levenshtein de la distance de Levenshtein classique.

## Applications

La motivation originale était de mesurer la distance entre un mot correct et un mot comportant une faute d'orthographe humaine afin d'améliorer des applications telles que les vérificateurs d'orthographe. Elle a également été utilisée pour effectuer de l'exploration de données/partitionnement de données, comparer des paquets de réseaux informatiques, quantifier la similarité entre des séquences d'ADN, l'identification de gènes.

## Algorithme

Ci-dessous, le pseudo-code pour la fonction DistanceDeDamerauLevenshtein qui prend deux chaînes de caractères, chaine1 de longueur longueurChaine1, et chaine2 de longueur longueurChaine2, et on calcule la distance Damerau-Levenshtein entre les deux :

On ajoute simplement cette partie au code de la distance de Levenshtein :

Le coût de la transposition est de 0 si le coût de substitution est de 0 (chaine1[i] = chaine2[j] = chaine1[i-1] = chaine2[j-1] ⇒ permutation de deux caractères identiques).

