Adloun

informatique (tronc commun des prépas scientifiques) · Chapitre 18 · Exercice de TD

La distance d'édition (Levenshtein)

La programmation dynamique · niveau 2

Énoncé

La distance de Levenshtein entre deux chaînes est le nombre minimal de modifications élémentaires (insertion, suppression ou substitution d'un caractère) nécessaires pour passer de l'une à l'autre. (a) Établir la récurrence sur les préfixes. (b) Implémenter l'algorithme et calculer la distance entre "CHAT" et "CHIEN". (c) Indiquer deux domaines d'application réels.

Corrigé

(a) Soit la distance entre le préfixe de taille de et le préfixe de taille de . (b)

def levenshtein(u: str, v: str) -> int:
    n, m = len(u), len(v)
    D = [[0] * (m + 1) for _ in range(n + 1)]
    for i in range(n + 1):
        D[i][0] = i
    for j in range(m + 1):
        D[0][j] = j
    for i in range(1, n + 1):
        for j in range(1, m + 1):
            cout = 0 if u[i - 1] == v[j - 1] else 1
            D[i][j] = min(D[i - 1][j] + 1,      # suppression
                          D[i][j - 1] + 1,      # insertion
                          D[i - 1][j - 1] + cout) # substitution
    return D[n][m]

assert levenshtein("CHAT", "CHIEN") == 3

Les 3 opérations minimales sont : substitution de A par I, substitution de T par E, et insertion de N. (c) Utilisée dans les correcteurs orthographiques (recherche de mots proches d'une saisie erronée) et en bio-informatique (alignement de séquences d'ADN pour mesurer la parenté entre deux gènes).

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre