DUT Info Structures de données et algorithmes fondamentaux 2020–2021
TD 1 - Complexité
Exercice 1. Donnez la complexité des algorithmes suivants (n est une variable entière qui a été initialisée) :
a)
1 s = 0
2 for i in range(n):
3 s = s + 1 - 2*i
b)
1 s = 0
2 for i in range(n):
3 s = s * s
4 for j in range(n):
5 s = s + 1
c)
1 s = 0
2 for i in range(n):
3 for j in range(n * n):
4 s = s + 1
d)
1 s = 0
2 for i in range(n):
3 j = 0
4 while j <= i:
5 s = s + 1
e)
1 s = 0
2 for i in range(n):
3 for j in range(i * i):
4 for k in range(j):
5 s = s + 1
Que devient la complexité de l’algorithmed)si l’on rajoutej = j + 1dans le corps de la seconde boucle ?
Exercice 2. Calculez la complexité du code suivant (vous pouvez supposer que la fonction print() est enO(1), et que la variablen a été initialisée) :
1 i = 1
2 p = n
3 while i <= n:
4 for j in range(1, p+1):
5 print(j)
6 i = i + 1
7 i = i + 1
Exercice 3. Calculez la complexité du code suivant :
1 # x, p, n sont des variables entières déjà initialisées
2 r = 0
3 for i in range(1, n+1):
4 for j in range(1, p+1):
5 r = 2 * (i + j) + r
6
7 for k in range(1, x+1):
8 r = r * k
9 print(r)
Exercice 4. Le nème nombre harmoniqueHn est défini par
Hn=
n
X
i=1
1
i = 1 +1 2 +1
3+· · ·+ 1 n.
Écrivez une fonction renvoyantHn (nest supposé naturel) et donnez sa complexité.
Les deux exercices suivants vous demandent d’effectuer des calculs à l’aide de séries, c’est-à- dire des sommes infinies. Pour avoir un algorithme, donc une méthode qui se termine, remplacez
∞ par un paramètre permettant à l’utilisateur de votre algorithme de contrôler le nombre de termes à calculer.
Page 1 / 2
DUT Info Structures de données et algorithmes fondamentaux 2020–2021
Exercice 5. La série de Leibniz permet de calculer π comme suit :
π = 4
∞
X
i=0
(−1)i 2i+ 1 = 4
1−1
3 +1 5 −1
7 +· · ·
Écrivez une fonction utilisant cette série pour calculer π, qui utilisera un paramètre naturel n donnant le nombre d’itérations à effectuer, et donnez sa complexité.
Exercice 6. La constanteepeut être calculée par la série suivante, qui s’appuie sur la factorielle n! =n×(n−1)×(n−2)× · · · ×2×1(avec0! = 1) :
e=
∞
X
i=0
1
i!= 1 + 1 + 1 2!+ 1
3!+· · ·
Écrivez une fonction utilisant cette série pour calculer e, qui utilisera un paramètre naturel n donnant le nombre d’itérations à effectuer, et donnez sa complexité.
Exercice 7. Classez les fonctions suivantes par ordre croissant selon la notationO(·). Précisez si certaines d’entre elles sont équivalentes, et expliquez pourquoi.
1) n 2) 2n 3) nlogn 4) lnn
5) n−n3+ 7n5 6) logn 7) √
n 8) en 9) n2+ logn 10) n2 11) 2n−1 12) log logn
13) n3 14) (logn)2 15) n! 16) n1+ε où 0< ε <1
Exercice 8. Les algorithmes suivants utilisent une boucle pour réduire la valeur d’un naturel nà 0 et compter, à l’aide d’une variablec, le nombre d’itérations effectuées (on suppose que la variablena été déclarée et initialisée).
1. donnez la complexité de chacun de ces algorithmes en fonction den;
2. classez ces algorithmes par ordre croissant de temps d’exécution, en fonction des com- plexités calculées ;
3. lequel de ces trois algorithmes préfèrerait-on en pratique ? a)
1 c = 0
2 while n > 0:
3 n = n - 1
4 c = c + 1
b)
1 c = 0
2 while n > 0:
3 n = n // 2
4 c = c + 1
c)
1 c = 0
2 while n > 0:
3 n = n // 3
4 c = c + 1
Exercice 9. Les deux questions ci-dessous doivent être résolues sans l’opérateur**ni la fonction pow().
1. Écrivez une fonction calculant an pour nnaturel, et donnez sa complexité.
2. Écrivez une fonction enO(logn) calculantan dans le cas oùnest une puissance de2.
Page 2 / 2