algorithmique (école d'ingénieur) · Chapitre 8 · Application directe du cours
Plus longue sous-séquence commune à la main
Séquences et chaînes de caractères · niveau 1 (application)
Énoncé
Soit et .
- Calculer le tableau de terme général , longueur d'une plsc aux - et -préfixes de et .
- En déduire et une plsc, en suivant la reconstruction du cours.
- On modifie la fonction
plscpour qu'elle préfère la case de gauche à la case du dessus en cas d'égalité. Obtient-on la même plsc ? Y en a-t-il plusieurs ?
Corrigé
- On remplit ligne par ligne : si les symboles sont égaux, , sinon .
H U M A I N
0 0 0 0 0 0 0
C 0 0 0 0 0 0 0
H 0 1 1 1 1 1 1
I 0 1 1 1 1 2 2
M 0 1 1 2 2 2 2
P 0 1 1 2 2 2 2
A 0 1 1 2 3 3 3
N 0 1 1 2 3 3 4
Z 0 1 1 2 3 3 4
E 0 1 1 2 3 3 4
- . En partant de la case :
EetZsont inutiles (on monte),NN(diagonale), puisA,M,H: la plsc estHMAN.
nom : T
valeurs : C H I M P A N Z E
vert : 1 3 5 6
nom : U
valeurs : H U M A I N
vert : 0 2 3 5
legende : la plsc HMAN
- On obtient encore
HMAN: c'est ici la seule plsc (on peut le vérifier en énumérant les sous-séquences de longueur deHUMAIN). En général, changer la préférence peut changer la plsc retournée, jamais sa longueur.
static String plscGauche(String T, String U, int[][] L, int p, int q) {
if (p == 0 || q == 0) return "";
if (T.charAt(p - 1) == U.charAt(q - 1))
return plscGauche(T, U, L, p - 1, q - 1) + T.charAt(p - 1);
if (L[p][q] == L[p][q - 1]) return plscGauche(T, U, L, p, q - 1); // u(q-1) inutile
return plscGauche(T, U, L, p - 1, q);
}100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.