Algorithmique - ROB3 TD2 - Complexité Exercice 1 (Notations de Landau) Question 1.1 Rappeler la dénition de O, Ω, Θ. Question 1.2 Démontrer que n2 ∈ O(10−4 n3 ) 25n4 − 19n3 + 13n2 ∈ O(n4 ) 2n+100 ∈ O(2n ) Question 1.3 Montrer que, si c est un réel positif, alors g(n) = 1 + c + c2 + . . . + cn est en : (a) Θ(1) si c < 1. (b) Θ(n) si c = 1. (c) Θ(cn ) si c > 1. Exercice 2 (Fonctions F et G : complexité) Question 2.1 Déterminer la complexité de la fonction itérative G suivante : fonction G(n : entier) : entier R←2 pour i de 1 à n faire R←R∗R n pour Retourner(R) Question 2.2 Déterminer la complexité de la fonction récursive F suivante : fonction F(n : entier) : entier si n=0 alors Retourner(2) sinon Retourner (F(n-1) * F(n-1)) n si Comment améliorer cette complexité ? Exercice 3 (Problème de Josèphe) Le problème de Flavius Josèphe (célèbre historien) se formule comme suit : n personnes sont placées en cercle, chacune énonce dans l'ordre les nombres de 1 à k , puis on reprend à 1. Tous ceux qui ont dit le nombre k sortent du cercle. Le dernier à rester dans le cercle est le vainqueur. On s'intéresse dans cet exercice au cas où k = 2. En supposant que les places dans le cercle sont numérotées de 0 à n − 1, on cherche à concevoir une fonction récursive J(n) qui retourne le numéro de la place où se positionner dans le cercle pour l'emporter. Question 3.1 Quel numéro doit retourner J(10) ? Etablir la relation de récurrence qui permet de déterminer J(n) à partir de J(n − 1). Quelle est la complexité de la fonction récursive correspondante ? Question 3.2 Etablir la relation de récurrence qui permet de déterminer J(n) à partir de J(n/2). Quelle est la complexité de la fonction récursive correspondante ? Question 3.3 Exercice 4 (Multiplication russe) L'algorithme suivant réalise le produit de deux entiers a et b. C'est la version itérative de l'algorithme vu en cours. Remarquons que les opérations de multiplication et de division par deux sont simples pour un codage binaire puisqu'elles consistent à décaler d'un bit vers la gauche ou vers la droite. L'algorithme est le suivant : fonction mult2(entier a, entier b) : entier prod := 0; x := a; y := b; tant que (y est différent de 0) si (y est impair) prod := prod + x; y := y - 1; fin si; x := 2*x; y := y/2; fin tant que; retourner prod; Question 4.1 gramme. Exhiber un invariant de boucle permettant de justier la validité du pro- L'opération la plus coûteuse dans l'algorithme précédent est l'addition, qui se fait en O(n) (additions de bits) pour des nombres de n bits. Déterminer le nombre de fois qu'elle est répétée au pire et en déduire la complexité de l'algorithme. Question 4.2