TD d’algorithmique avanc´ee
TD 5 : plus longue sous-s´equence commune
Jean-Michel Dischler et Fr´ ed´ eric Vivien
Probl´ ematique
Une s´equence est une suite finie de symboles pris dans un ensemble fini. Si u=ha1, a2, ..., ani est une s´equence, o`ua1,a2, ...,an sont des lettres, l’entiernest lalongueur deu. Une s´equence v=hb1, b2, ..., bmi est une sous-s´equence de u = ha1, a2, ..., ani s’il existe des entiers i1, i2, ..., im (1 ≤ i1 < i2 < ... <
im ≤ n) tels que bk = aik pour k ∈ [1, m]. Par exemple, v = hB, C, D, Bi est une sous-s´equence de u=hA, B, C, B, D, A, Bicorrespondant `a la suite d’indiceh2,3,5,7i.
Une s´equencewest unesous-s´equence communeaux s´equencesuetvsiwest une sous-s´equence deuet dev. Une sous-s´equence commune estmaximaleou est uneplus longue sous-s´equence si elle est de longueur maximale. Par exemple : les s´equences hB, C, B, Ai et hB, D, A, Bi sont des plus longues sous-s´equences communes dehA, B, C, B, D, A, Biet de hB, D, C, A, B, Ai.
R´ esolution par programmation dynamique
1. On cherche `a d´eterminer la longueur d’une sous-s´equence commune maximale `a u=ha1, a2, ..., aniet v=hb1, b2, ..., bmi. On noteL(i, j) la longueur d’une sous-s´equence commune maximale `aha1, a2, ..., aii et hb1, b2, ..., bji (0 ≤ j ≤m, 0 ≤i ≤n). Donnez une r´ecurrence d´efinissant L(i, j). Indication : on pourra distinguer les cas ai =bj etai6=bj.
2. ´Ecrivez alors un algorithme r´ecursif calculant la longueur de la plus longue sous-s´equence commune de deux s´equences.
3. Montrez que cet algorithme est de complexit´e au moins exponentielle dans le cas o`u les deux s´equences n’ont pas d’´el´ements en commun.
4. ´Ecrivez alors un algorithme suivant le paradigme de la programmation dynamique et calculant la longueur de la plus longue sous-s´equence commune de deux s´equences.
5. Quelle est la complexit´e de cet algorithme ?
6. Modifiez l’algorithme pr´ec´edent pour que l’on puisse en plus construireune plus longue sous-s´equence commune et affichez une telle sous-s´equence.