Adloun

Distance d'édition (Levenshtein)

Exercice de TD · niveau 3 (difficile) · NSI (terminale), chapitre 7 — La programmation dynamique

Énoncé

Distance d'édition (Levenshtein).

Calculer le nombre minimal d'opérations (insertion, suppression, substitution d'un caractère) pour transformer une chaîne en une chaîne .

Corrigé

Soit la distance entre et . Si les derniers caractères sont égaux, ; sinon on prend le minimum des trois opérations, augmenté de 1.


def distance_edition(X, Y):
    n, m = len(X), len(Y)
    table = [[0] * (m + 1) for _ in range(n + 1)]
    for i in range(n + 1):
        table[i][0] = i
    for j in range(m + 1):
        table[0][j] = j
    for i in range(1, n + 1):
        for j in range(1, m + 1):
            if X[i - 1] == Y[j - 1]:
                table[i][j] = table[i - 1][j - 1]
            else:
                table[i][j] = 1 + min(
                    table[i - 1][j],      # suppression
                    table[i][j - 1],      # insertion
                    table[i - 1][j - 1]   # substitution
                )
    return table[n][m]

La complexité est .

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.