TD 8 Licence 3 Info et Math/Info TD 8 – Révisions Exercice 1 Combien de lignes (en notation asymptotique θ(.)) écrit le programme suivant (justifier) : function fun(n) if (n>1) then print_line ("encore une") ; fun(n/2) ; fun(n/2) ; Exercice 2 On se donne un tableau T de n éléments entiers (non triés). On aimerait retirer en temps θ(n.log(n)) tous les doublons de T . Comment faire ? Exercice 3 Donner un algorithme efficace en temps, et qui utilise peu de mémoire, pour réarranger les éléments d’un tableau de telle sorte que chaque élément négatif est avant tout élément positif. Exercice 4 On considère la récurrence suivante : T (n) = 2T (n/2) + 5n.log2 (n) avec T (1) = 1. Dire lesquelles de ces affirmations sont vraies : 1. T (n) = θ(n.log2 (n)) 4. T (n) = θ(n) 2. T (n) = Ω(n.log2 (n)) 3. T (n) = θ(n.(log2 (n))2 ) 3 5. T (n) = O(n.(log(n)) ) 6. T (n) = θ(n.(log5 (n))2 ) Exercice 5 Calculer la distance d’édition entre EXERCICES et EXAMEN avec l’algorithme vu en cours. Exercice 6 Multiplication : Soit un ensemble S muni d’une opération · : S 2 → S associative, i.e. e1 · (e2 · e3 ) = (e1 · e2 ) · e3 pour tout e1 , e2 , e3 ∈ S. En général, en fonction du type des éléments de S, il peut être moins coûteux de calculer (e2 · e3 ) puis e1 · (e2 · e3 ), plutôt que (e1 · e2 ) puis (e1 · e2 ) · e3 . On veut calculer ici e1 · e2 · · · · · en où e1 , . . . , en ∈ S sont donnés en entrée. On veut déterminer le parenthésage de coût minimal. Pour cela on suppose disposer d’une fonction de coût C qui à tout 1 ≤ i ≤ j < k ≤ n associe le coût C(i, j, k) de multiplier deux éléments eij et e(j+1)k , où eij = ei · . . . ej et e(j+1)k = ej+1 · · · · · ek . 1. Donner un algorithme de programmation dynamique qui permet de calculer le coût minimal pour calculer e1 · · · · · en , et retourne le parenthésage associé et donner sa complexité asymptotique. Idée : introduire une fonction K(i, k) qui représente le coût minimal pour calculer ei ·· · ··ek . Pour calculer les valeurs de K, itérer sur des différences k − i croissantes. 2. Supposons que S soit l’ensemble des matrices d’entiers. Pour tout e, f ∈ S, à quelle condition e · f est bien défini ? Quel est le coût de calculer e · f avec l’algorithme naïf ? Si on vous calculer le produit de n matrices, comment définir la fonction C ? 1