TD 7 : programmation dynamique Licence 3 Info et Math/Info
TD 7
Programmation Dynamique
Exercice 1 On définit la récurrence V(i, j) = max(V(i−1, j + 1) + F(i), V (i−1, j)) pour
tout i > 0,j≥0, où F(i)est le i-ème nombre de Fibonacci. On aura aussi les cas de base
suivants : V(0, j) = 0 pour tout j≥0. Donner un algorithme de programmation dynamique
pour calculer V(n, m)étant donnés net m.
Exercice 2 On se donne une chaîne de caractères s[1..n]qui est un texte dont la ponc-
tuation a disparu (par exemple "untextedontlaponctuationadisparu"). Vous avez accès à un
dictionnaire dict() tel que dict(w)retourne 1 ssi west un mot du dictionnaire, 0sinon. On
suppose cette opération en temps constant. Donner un algorithme de programmation dyna-
mique en O(n2)qui permet de vérifier que sest une séquence de mots valides du dictionnaire.
Enrichir votre algorithme pour qu’il retourne aussi la séquence de mots valides.
Exercice 3 Soient net k≤ndeux entiers, et p1, . . . , pn∈[0,1] des probabilités. On réalise
nlancés de pièces. On veut calculer la probabilité qu’on ait kfaces sachant que pour la pièce
i, la probabilité d’obtenir face est pi. Donner un algorithme de programmation dynamique
pour résoudre le problème en O(n2). On supposera que les multiplications de nombres réels
se font en temps constant.
Exercice 4 Plus longue sous-séquence commune Etant donnée deux séquences x[1..n]
et y[1..m], on cherche la longueur de la plus longue sous-séquence commune (pas nécessai-
rement des positions consécutives). Par exemple, avec ABCBDAB et BDCABA, il y a
BDAB,BCAB et aussi BCBA.
1. Trouver une plus longue sous-séquence commune à AAACCGT GAGT T
et CACCCCT AACGT C.
2. Si xanéléments, combien de sous-séquences de xexiste-t-il ?
3. Quelle serait la complexité en temps d’un algorithme brute-force ?
4. Donner un algorithme de programmation dynamique en θ(n.m)pour résoudre ce pro-
blème.
5. Modifier votre algorithme pour pouvoir afficher une plus longue sous-séquence com-
mune.
1