La plus longue sous-suite commune
Exercice · informatique (tronc commun des prépas scientifiques), chapitre 18 — La programmation dynamique
Énoncé
La plus longue sous-suite commune (PLSC) de deux chaînes et est la suite de caractères de longueur maximale apparaissant dans le même ordre (pas nécessairement contigus) dans les deux chaînes. (a) Définir la récurrence sur la longueur de la PLSC entre les préfixes de taille de et de . (b) Implémenter l'algorithme, calculer la PLSC pour les mots "BATEAU" et "TABLEAU", et reconstruire la solution. (c) Citer une application quotidienne de cet algorithme.
Corrigé
(a) Si les derniers caractères des préfixes sont identiques (), ils prolongent la PLSC. Sinon, le caractère optimal provient soit de l'exclusion de , soit de l'exclusion de : (b)
def plsc(u: str, v: str) -> str:
n, m = len(u), len(v)
L = [[0] * (m + 1) for _ in range(n + 1)]
for i in range(1, n + 1):
for j in range(1, m + 1):
if u[i - 1] == v[j - 1]:
L[i][j] = L[i - 1][j - 1] + 1
else:
L[i][j] = max(L[i - 1][j], L[i][j - 1])
# Reconstruction à rebours
i, j, lettres = n, m, []
while i > 0 and j > 0:
if u[i - 1] == v[j - 1]:
lettres.append(u[i - 1])
i -= 1
j -= 1
elif L[i - 1][j] >= L[i][j - 1]:
i -= 1
else:
j -= 1
return "".join(reversed(lettres))
plsc("BATEAU", "TABLEAU")renvoie"BEAU"(ou"TEAU", de longueur 4). (c) C'est l'algorithme utilisé par la commandediff(et par Git) pour identifier les lignes ajoutées ou supprimées entre deux versions d'un fichier source.
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.