CHAPITRE)6)
!
!
Complexité!d’un!algorithme!
!
!
Dans%ce%chapitre,%nous%allons%définir%et%apprendre%à%évaluer%la%complexité%d’un%algorithme,%ceci%afin%
de%prévoir%et%d’optimiser%son%temps%d’exécution.%%
1. Complexité)d’un)algorithme)
1.1. )Définition)
Lorsqu’on%écrit% des%algorithmes% en%informatique,%on% se% rend%rapidement%compte%que%certains%sont%
plus%rapides%et%plus%efficaces%que%d’autres.%C'est%ce%que%l'on%appelle%l'efficacité(d'un(algorithme.%Pour%
la%quantifier,%on%s'intéresse%à%son%contraire,%la%complexité(:%la%complexité%d’un%algorithme%est%en%effet%
plus%simple%à%quantifier,%puisqu’il%suffit%de%mesurer%la%quantité%de%ressources%qu'il%exige%(en%termes%de%
mémoire%et/ou%de%temps).%
L’évaluation%de%la%complexité%d’un%algorithme%a%deux%objectifs%:%
F prévoir%les%ressources%nécessaires%pour%mettre%en%œuvre%et%exécuter%l’algorithme%
F comparer%deux%algorithmes%réalisant%la%même%opération.%
L’efficacité%d’un%algorithme,%et%donc%sa%complexité,%peut%être%évaluée%:%
F en%temps%:%la%complexité(en(temps%évalue%le%temps%d’exécution%de%l’algorithme%
F en%espace%:%la%complexité(en(espace%évalue%la%mémoire%nécessaire%à%l’exécution%de%l’algorithme.%
L’évaluation%de%la%complexité%d’un%algorithme%peut%se%faire%de%différentes%façons%:%
F au%niveau%purement%algorithmique,%par%analyse%de%l’algorithme%et%calcul%
F au% niveau% de% l’exécution% du% programme,% en% évaluant% expérimentalement%le% temps/la% mémoire%
nécessaire%à%l’exécution%de%l’algorithme.%
1.2. )Paramètre)de)complexité)
Le% paramètre( de( complexité%d’un% algorithme% est% le% paramètre% qui% va% faire% varier% son% temps%
d’exécution.%
Exemple%:%calcul%de%la%factorielle%d’un%nombre%n%
def Factorielle(n):
r = 0
if n == 0 :
return r
else :
for i in range(2,n+1):
r = r*i
return r
Dans%cet%exemple,%le%paramètre%de%complexité%est%la%valeur%de%n.%
2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Chapitre!6!:!Complexité!d’un!algorithme!
1.3. )Opérations)élémentaires)
On%appelle%opération(élémentaire%toutes%les%opérations%consistant%en%:%
•%une%déclaration%ou%une%affectation%de%variables%
•%une%opération%mathématique%ou%logique%
•%une%comparaison%ou%un%test%
•%%une%impression%ou%un%retour%de%valeur%
Dans%la%suite,%on%suppose%que%toutes%les%opérations%élémentaires%ont%le%même%temps%d'exécution,%que%
l'on%notera%oe%et%qui%dépend%du%langage%de%programmation%et%de%l'ordinateur%utilisés.%
1.4. )Calcul)de)complexité)
Pour%évaluer%la%complexité%d’un%algorithme,%on%peut% compter%le% nombre%d’opérations%élémentaires%
exécutées%par%cet%algorithme.%
Exemple%:%%
Calculons%la%complexité%de%l’algorithme%du%calcul%de%la%factorielle,%en%supposant%que%n0.%
Pour%cela,%on%compte%le%nombre%d’opérations%élémentaires%:%
def Factorielle(n):
r = 0 déclaration/affectation%:%1%oe%
if n == 0 : test/comparaison%:%1%oe%
return r
else :
for i in range(2,n+1): test%:%n × 1%oe%
r = r*i opération%mathématique%:%n × 1%oe%
return r retour%de%valeur%:%1%oe%
Le%temps%d’exécution%de%cet%algorithme%vaut%donc%:%
(3+2n)!×%oe-
1.5. )Complexités)au)meilleur)et)au)pire)des)cas)
Lorsque,%pour%une%valeur%donnée%du%paramètre%de%complexité,%le%temps%d'exécution%varie%selon%les%
données%d'entrée,%on%peut%distinguer%:%
•%la%complexité(au(pire(des(cas(:%cas%le%plus%défavorable,%où%le%temps%d’exécution%est%maximal%
•%la%complexité(au(meilleur(des(cas(:%cas%le%plus%favorable,%où%le%temps%d’exécution%est%minimal%
•%la%complexité(en(moyenne(:%comportement%standard%de%l’algorithme.%
En% général,% on% s'intéresse% à% la% complexité% au% pire% des% cas% car% on% souhaite% connaître% la% borne%
supérieure%du%temps%d'exécution%de%l'algorithme.%
Exemple%:%%
Si%on%cherche%un%élément%donné%dans%un%tableau%de%n%éléments%tous%distincts.%
Dans%le%pire%des%cas,%il%faudra%passer%en%revue%tous%les%éléments%:%la%complexité%au%pire%des%cas%
vaut%donc%n × oe.%
Dans% le% meilleur% des% cas,% on% trouve% l’élément% recherché% au% premier% essai%:% la% complexité% au%
meilleur%des%cas%vaut%donc%1 × oe.%
) )
!Chapitre!6!:!Complexité!d’un!algorithme!!!!!!!!!!!!!!!!3!
)
2. Pour)s’entraîner)
2.1. )Tri)des)éléments)d’un)tableau)
1) Ecrire%une%fonction%qui%trie%les%éléments%d’un%tableau%𝑇
!%de%𝑛%élément%(où%𝑛%est%un%entier%naturel%
quelconque)%et%les%range%par%ordre%croissant%dans%un%nouveau%tableau%𝑇
!.%
2) Evaluer%la%complexité%de%cette%fonction.%
2.2. )Retour)sur)les)premières)fonctions)
1)%Ecrire%une%fonction%comparaison%qui%prend%en%arguments%𝑥%et%𝑦%et%qui%renvoie%:%
!
1!!si!!𝑥<𝑦
0!!!!si!!𝑥=𝑦
1!!!!si!!𝑥>𝑦
%
2)%Ecrire%une%fonction%factorielle%qui%prend%en%arguments%un%entier%𝑛%(avec%𝑛>0)%%et%qui%renvoie%la%
valeur%de%sa%factorielle.%
3)%Ecrire%une%fonction%puissance%qui%prend%en%arguments%un%entier%𝑛%(avec%𝑛>0)%et%un%flottant%𝑥%et%
qui%renvoie%la%valeur%de%𝑥!.%
4)%Evaluer%la%complexité%de%ces%différentes%fonctions.%
)
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !