Adloun

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 plsc pour 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 : E et Z sont inutiles (on monte), N N (diagonale), puis A, M, H : la plsc est HMAN.

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 de HUMAIN). 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

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 →