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