Adloun

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 = 9

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →