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 n et m. Exercice 2 On se donne une chaîne de caractères s[1..n] qui est un texte dont la ponctuation a disparu (par exemple "untextedontlaponctuationadisparu"). Vous avez accès à un dictionnaire dict() tel que dict(w) retourne 1 ssi w est un mot du dictionnaire, 0 sinon. On suppose cette opération en temps constant. Donner un algorithme de programmation dynamique en O(n2 ) qui permet de vérifier que s est 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 n et k ≤ n deux entiers, et p1 , . . . , pn ∈ [0, 1] des probabilités. On réalise n lancés de pièces. On veut calculer la probabilité qu’on ait k faces 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écessairement 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 x a n éléments, combien de sous-séquences de x existe-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 problème. 5. Modifier votre algorithme pour pouvoir afficher une plus longue sous-séquence commune. 1