Adloun

La distance d'édition (Levenshtein)

Exercice · informatique (tronc commun des prépas scientifiques), chapitre 18 — La programmation dynamique

É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).

Les autres exercices de ce chapitre Le cours du chapitre

Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.