Algorithmique - ROB3 TD2 - Complexité

publicité
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
Téléchargement