Académique Documents
Professionnel Documents
Culture Documents
1. Introduction
Il est important de pouvoir juger un programme un autre programme qui résout le même
problème. Il existe plusieurs critères sur lesquels on peut se baser pour pouvoir qualifier un
programme :
Est-ce qu’il fait ce que nous lui demandons de faire ?
Est-ce qu’il est muni d’une documentation qui décrit comment l’utiliser et comment il
fonctionne ?
Est-ce que le code est facilement lisible ?
Activité: Proposer en Python deux programmes différents pour vérifier la primalité d’un
entier n?
Afin de réaliser cette activité, on a besoin de mesurer le temps d’exécution de chaque
programme. En Python, nous pouvons simuler un chronomètre :
on le déclenche juste avant le début du programme on l'arrête juste après la fin.
le temps écoulé entre les deux pressions est la durée qui nous intéresse.
Solution Activité:
Programme naïf : ce programme consiste à diviser n par tous les entiers qui lui sont
inférieurs. Si un de ces entiers est un diviseur de n, n n'est pas premier.
from time import *
def est_premier(n) : Résultat d’exécution:
a=time() >>> est_premier(2**31-1))
for i in range(2, n): 554.3090000152588 sec
if n% i == 0 : True
print(time()-a, "sec")
return (False)
print(time()-a, "sec")
return(True)
Programme rapide : Nos connaissances en arithmétique nous assurent que si nombre n'est
pas premier, un de ses diviseurs est inférieur à √ . La fonction est_premier devient alors :
from time import *
def est_premierRapide(n) : Résultat d’exécution:
a=time() >>> est_premierRapide(2**31-1)
for i in range(2,int(n**(1/2))+1): 0.009999990463256836 sec
if n% i == 0 : True
print(time()-a, "sec")
return (False)
print(time()-a, "sec")
return(True)
Conclusion :
Dans l’étude de complexité d’un algorithme on ne mesure pas la durée en heures, minutes,
secondes, ...:
cela impliquerait d'implémenter les algorithmes qu'on veut comparer ;
de plus, ces mesures ne seraient pas pertinentes car le même algorithme sera plus
rapide sur une machine plus puissante.
L’étude de complexité consiste donc à utiliser des unités de temps abstraites
proportionnelles au nombre d'opérations effectuées.
2. Définitions
Complexité temporelle : c'est le nombre d'opérations élémentaires effectuées par une
machine qui exécute le programme et le temps nécessaire pour chaque opération.
Complexité spatiale : c'est le nombre de positions mémoire utilisées par une machine
qui exécute le programme.
3. Notion de Landau O
Il faut noter que dans le calcul de la complexité d’un algorithme ce qui est important c’est
l’ordre de grandeur du nombre d’opérations fondamentales. Soit T(n) est le nombre
d’opérations effectuées. On dit que T(n) est en O(f(n)) s’il existe deux constantes positives c
et n0 telles que T(n)≤c × f(n) pour tout n>n0. Où f est d'habitude une combinaison de
polynômes, logarithmes ou exponentielles.
( ) ( ( )) ( ) ( )
Exemple : Supposant que le temps d'exécution d’un algorithme est décrit par la fonction
T(n) = 3n2+10n+10, Calculer O(T(n))?
O(T(n)) = O(3 n2 + 10n + 10) = O(max (3 n2, 10n, 10)) = O(3 n2) = O (n2)
3.1. Classes de complexité
Classe Notation O Exemple
Constante O(1) Accéder au premier élément d'un ensemble de données
Linéaire O(n) Parcourir un ensemble de données
Logarithmique O(log(n)) Couper un ensemble de données en deux parties égales, puis couper ces
moitiés en deux parties égales, etc.
Quasi-linéaire O(n log(n)) Couper répétitivement un ensemble de données en deux et combiner les
solutions partielles pour calculer la solution générale
Quadratique O(n2) Parcourir un ensemble de données en utilisant deux boucles imbriquées
P
Polynomiale O(n ) Parcourir un ensemble de données en utilisant P boucles imbriquées
n
Exponentielle O(a ) Générer tous les sous ensembles possibles d'un ensemble de données
Travaux dirigés :
Exercice 1 :
Calculer la complexité des programmes:
est_premier et est_ premierRapide
Exercice 2 :
Quel est le coût de la fonction variance en fonction de la longueur de la liste L en déduisant sa
complexité ? N’y a-t-il pas moyen de faire plus rapide ?
L = [0 ,1 ,2 ,2 ,3 ,1 ,3 ,0]
print moyenne (L)
print variance (L)
Exercice 3 :
1) Montrez que la complexité de la fonction suivante est quadratique en n.