TD : Programmation Dynamique

publicité
Université Paris Sud
L3 - Algorithmique et complexité - Année 2007-2008
TD no 7
TD : Programmation Dynamique
Exercice 1 [Suite de Fibonacci]
La suite de Fibonacci est définie par la récurence suivante :


si i = 0
0
Fi = 1
si i = 1


Fi−1 + Fi−2 sinon
(1)
1. Ecrivez de manière récursive cette fonction.
2. Dessinez l’arbre d’éxécution de cette fonction pour i = 6
3. Donnez la forme récurente de la compléxité de cette fonction en nombre d’addition. Qu’en pensez
vous ?
4. Ecrivez maintenant cette fonction de manière itérative en utilisant le principe de la programmation dynamique.
5. Calculez la compléxité de cette nouvelle fonction.
Exercice 2 [Cnp ]
Les coefficients binomiaux Cnp sont des quantités très utiles qui interviennent dans des calculs
algébriques, en combinatoire, probabilité, ... Ils sont définis par la formule suivante :


0 ≤ p ≤ n
(2)
Cnn = Cn0 = 1

 p
p−1
p
Cn = Cn−1 + Cn−1
1. Écrivez une fonction récursive c(n, p) qui calcule Cnp
2. Dessinez l’arbre des appels récursifs pour c(5, 2) et calculez les nombre d’additions.
3. Dessinez le triangle de Pascal pour n = 5 et montrez qu’on peut calculer une ligne en se contetant
de stocker dans un tableau certains des calculs précédents.
4. Ecrivez une fonction qui calcul les Cnp avec un coût polynomial en utilisant la programmation
dynamique.
Exercice 3 [Distance d’édition / distance de Levenshtein]
Nous allons nous intéresser au problème de la distance d’édition (cf poly 4 diapos 17 et 18).
1. Donnez un algorithme itératif qui prend en entrée deux chaı̂nes de caractères et qui renvoie un
entier correspondant à la distance d’édition entre ces mots.
2. Donnez la compléxité de votre algorithme.
1
Téléchargement