algorithmique (école d'ingénieur) · Chapitre 8 · Exercice de TD
Plus courte sur-séquence commune
Séquences et chaînes de caractères · niveau 3 (difficile)
Énoncé
Une sur-séquence commune à et est une séquence dont et sont deux sous-séquences.
- Montrer que la longueur d'une plus courte sur-séquence commune est , où est la longueur d'une plsc.
- Écrire une fonction récursive, guidée par le tableau , qui retourne une plus courte sur-séquence commune.
- L'appliquer à et .
Corrigé
- Dans une sur-séquence commune , les symboles qui servent à la fois à et à forment une sous-séquence commune ; les autres servent à un seul des deux. Donc . Réciproquement, en fusionnant et le long d'une plsc (chaque symbole de la plsc écrit une seule fois), on obtient une sur-séquence de longueur .
- La fusion suit la reconstruction de la plsc ; quand un symbole est « inutile » à la plsc, on l'écrit quand même :
static String pcsc(String T, String U, int[][] L, int p, int q) {
if (p == 0) return U.substring(0, q); // il ne reste que U[0:q]
if (q == 0) return T.substring(0, p);
if (T.charAt(p - 1) == U.charAt(q - 1)) // symbole de la plsc, écrit une fois
return pcsc(T, U, L, p - 1, q - 1) + T.charAt(p - 1);
if (L[p][q] == L[p - 1][q]) return pcsc(T, U, L, p - 1, q) + T.charAt(p - 1);
return pcsc(T, U, L, p, q - 1) + U.charAt(q - 1);
}
- Ici , et : la longueur minimum est .
pcsc(ABCBDAB, BDCABA) = ABDCABDAB (longueur 9)
valeurs : A B D C A B D A B
vert : 1 3 5 7
legende : en vert, la plsc BCBA, écrite une seule fois : 7 + 6 - 4 = 9100 % 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.