ENSIT Année 2024-2025
Calcul de complexité
Durée : 2h 00
Aucun document autorisé – Calculatrice non autorisée
Partie A – Questions de cours (6 points)
1. (1 pt) Donnez la définition de la complexité temporelle d’un algorithme. Expliquez la différence entre les notations
O, Ω, et Θ.
2. (2 pts) Classez les fonctions suivantes de la plus petite à la plus grande complexité asymptotique (justifiez) :
- n log n, log n, n², 2ⁿ, n, n!
3. (1 pt) Quelle est la complexité moyenne de l’algorithme de recherche linéaire dans un tableau non trié contenant n
éléments ? Et dans le pire cas ?
4. (2 pts) Expliquez la différence entre complexité temporelle et complexité spatiale, avec des exemples.
Partie B – Étude de code (4 points)
Analyser la complexité du code suivant :
def mystery(n):
i=1
while i < n:
j=0
while j < i:
print(i, j)
j += 1
i *= 2
- a) Déterminez le nombre total d’itérations de la boucle interne.
- b) Donnez la complexité asymptotique en fonction de n.
Partie C – Problème d’algorithmique (10 points)
Considérez l’algorithme de tri par insertion suivant :
def insertion_sort(tab):
n = len(tab)
for i in range(1, n):
key = tab[i]
j=i-1
while j >= 0 and tab[j] > key:
tab[j + 1] = tab[j]
j -= 1
tab[j + 1] = key
1. (1 pt) Expliquez brièvement le principe de fonctionnement du tri par insertion.
2. (2 pts) Comptez le nombre d’opérations (comparaisons et affectations) effectuées :
a) dans le meilleur des cas (le tableau est déjà trié)
b) dans le pire des cas (le tableau est trié dans l’ordre décroissant)
3. (2 pts) Donnez la complexité temporelle asymptotique de l’algorithme dans :
- le meilleur cas,
- le pire cas,
- et le cas moyen.
4. (1 pt) Cet algorithme est-il in-place ? Justifiez brièvement