Académique Documents
Professionnel Documents
Culture Documents
Corrigé TD 1
Exercice 1
(c) Si p(x) est un polynôme quelconque de degré k, à coefficients entiers positifs, alors p(n)
est en Θ(nk ) :
Exercice 2
Exercice 3
Soient f (x) et g(x) des fonctions positives asymptotiquement. On suppose que S(n) ∈ O(f (n))
et T (n) ∈ O(g(n)). Montrer que :
(a) si f (n) ∈ O(g(n)) alors S(n) + T (n) ∈ O(g(n)) :
Exercice 4
Peut-on écrire :
(a) 2n+1 ∈ O(2n ) ?
Non, car pour n arbitrairement grand, 6 ∃c1 ∈ N∗ tel que 22n ≤ c2n . Autrement dit : si
c’était vrai, alors ∃c1 ∈ N∗ , n0 ∈ N∗ tels que ∀n ≥ n0 on a 22n ≤ c1 2n . Divisons alors
par 2n : ∀n ≥ n0 on a 2n ≤ c1 , ce qui est impossible car c1 est une constante !
Exercice 5
Soient f (x) et g(x) des fonctions asymptotiquement strictement positives, prouver ou démentir
les affirmations suivantes :
(a) f (n) = O(g(n)) implique que g(n) = O(f (n)) :
Exercice 6
En utilisant la notation O, donner, en fonction de n, la complexité dans le pire des cas des
fonctions suivantes :
(a) Fonction prodmat :
pour i = 1 à n faire
pour j = 1 à n faire
C[i, j] ← 0 ;
pour k = 1 à n faire
C[i, j] ← C[i, j] + A[i, k] ∗ B[k, j] ;
fin pour
fin pour
fin pour
Complexité : O(n3 )
Pour i = 1, on aura 2+3+4+. . .+n opérations en O(1) ; pour i = 2, on aura 3+4+. . .+n
opérations en O(1) ; . . . ; pour i = n − 1, on aura n opérations en PO(1). Ainsi on aura au
n−1
total : 1 × 2 + 2 × 3 + . . . + (n − 1) × n opérations en O(1), i.e., i=1 i(i + 1) opérations
n(n−1)(2n−1)
en O(1). Or n−1 + n(n−1)
P Pn−1 2 Pn−1
i=1 i(i + 1) = i=1 i + i=1 i = 6 2 . On obtient donc
une complexité en O(n3 ).
fin si
fin pour
Complexité : O(n2 )
La fonction recursive(n) est appelée 1 fois ; recursive(n−1) est appelée 2 fois ; recursive(n−
2) est appelée 4 fois ; . . . ; recursive(1) estPappelée 2n−1 fois et finalement recursive(0)
est appelée 2n fois. On aura donc en tout ni=0 2i = 2n+1 − 1 appels. Comme chacun se
fait en O(1), la complexité est en O(2n ).
Oui, à ce moment chaque fonction recursive(i), pour i = n, . . . , 0 est appelée une seule
fois. On aura donc une complexité en O(n).
Exercice 7
(a) Ecrire un algorithme itératif qui prenne en entrée un entier n et retourne le factoriel de
cet entier et prouver cet algorithme.
Fonction f actoriel :
f act ← 1
pour i = 2 à n faire
f act ← f act ∗ i
fin pour
retourner f act
fin Fonction
Preuve :
(i) Terminaison : Triviale car la boucle est exécutée n − 1 fois et le contenu de la boucle
s’effectue en temps constant.
(ii) Validité : Nous allons montrer qu’à la fin de l’itération i, la variable f act a pour
valeur i!. Pour cela, on effectue un raisonnement par récurrence : pour i = 2, f act2 =
f act1 ∗ 2 = 2!QX ; on suppose la propriété vraie pour i itérations, i.e., on suppose
que f acti = ij=1 j X ; considérons l’itération i + 1 : f acti+1 = f acti ∗ (i + 1)=
Qi Qi+1
j=1 j ∗ (i + 1)= j=1 j = (i + 1)! X.
Complexité : O(n).
(c) Ecrire un algorithme récursif qui calcule n! puis prouver cet algorithme.
Fonction f actorielbis :
si n ≤ 1
alors retourner 1
sinon
retourner (f actorielbis(n − 1) ∗ n)
fin Fonction
Preuve :
(i) Terminaison : Par récurrence sur n : pour f actorielbis(1) X (fin immédiate) ; sup-
posons f actorielbis(n) se termine et considérons f actorielbis(n + 1) : cette fonction
appelle f actorielbis(n) (qui par hypothèse se termine) et multiplie le résultat par n+1
puis renvoie le résultat final X.
(ii) Validité : Par récurrence : f actorielbis(1)
Q = 1! X ; on suppose la propriété vraie pour
n, i.e., on suppose que f actorielbis(n) = nj=1 j X ; considérons n+1 : f actorielbisn + 1 =
f actorielbis(n) ∗ (n + 1)= nj=1 j ∗ (n + 1)= n+1
Q Q
j=1 j = (n + 1)! X.
Complexité : O(n).
Exercice 8
Donner une fonction M in qui, étant donné un tableau T de n valeurs entières, retourne la
plus petite de ces valeurs. Donner la complexité, en fonction de n, de cette fonction.
Fonction M in
min ← Tab[1]
pour i = 2 à n faire
si T ab[i] < min alors
min ← T ab[i]
fin si
fin pour
retourner min
fin Fonction
Complexité : O(n)