0% ont trouvé ce document utile (0 vote)
116 vues14 pages

Cours Complexité

Transféré par

ismail
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • algorithmes de tri,
  • algorithmes de recherche,
  • puissance entière,
  • complexité Θ(n),
  • algorithmes récursifs,
  • optimisation d'algorithmes,
  • complexité en temps,
  • optimisation de code,
  • algorithme récursif,
  • efficacité algorithmique
0% ont trouvé ce document utile (0 vote)
116 vues14 pages

Cours Complexité

Transféré par

ismail
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Thèmes abordés

  • algorithmes de tri,
  • algorithmes de recherche,
  • puissance entière,
  • complexité Θ(n),
  • algorithmes récursifs,
  • optimisation d'algorithmes,
  • complexité en temps,
  • optimisation de code,
  • algorithme récursif,
  • efficacité algorithmique

Complexité d’un algorithme

Complexité d’un algorithme

Dwimi Omar

CRMEF FES-MEKNES. CPAM

21 novembre 2019
Complexité d’un algorithme

Ordre d’une application de N dans R∗+ .

Définition 1
Soit f et g deux applications de N dans R∗+ . On dit que f et g
ont le même ordre si f = O(g) et g = O(f ) ( à l’infini ). On note
f = Θ(g) (ou g = Θ(f ) )

"Avoir même ordre" est une relation d’équivalence sur l’espace


des fonctions de N dans R∗+ .
Complexité d’un algorithme

Introduction

Un algorithme efficace n’est pas seulement un algorithme qui


nous donne le résultat voulu avec une précision satisfaisante,
mais c’est aussi un algorithme qui s’exécute en un temps
acceptable.
Dans un algoruthme, chaque opération effectuée nécessite un
temps de traitement. Il y a plusieurs types d’opérations, celles
qu’on va considérer sont :
les tests.
les opérations arithmétique sur des données numériques
et souvent, ce sont les opérations arithmétiques qui ont plus
d’importance.
Complexité d’un algorithme

Compléxité d’un algorithme

Si n la taille de données prises par un algorithme, on note C (n)


le nombre des opérations effectuées par cet algorithme.
Définition 2
la complexité d’un algorithme est égale à l’ordre de sa fonction
de complexité C .
Complexité d’un algorithme

Complexités de référence

Coût constant : C (n) = Θ(1)


Coût logarithmique : C (n) = Θ(ln(n))
Coût linéaire : C (n) = Θ(n)
Coût quasi-linéaire : C (n) = Θ(n ln(n))
Coût quadratique : C (n) = Θ(n 2 )
Coût polynomial : C (n) = Θ(n p ) p ∈ N∗
Coût exponentiel : C (n) = Θ(x n ), x > 1
Complexité d’un algorithme

Pour avoir une idée ...

Pour un processeur effectuant 1 milliard d’opérations par


seconde, et pour une taille de taille n = 106 on a :
Θ(1) : 1 ns
Θ(ln(n)) : 15 ns
Θ(n) : 1 ms
Θ(n ln(n)) : 15 ms
Θ(n 2 ) : 15 min
Θ(n 3 ) : 30 ans
Θ(2n ) : 10300000 ans.
Complexité d’un algorithme

Exemple 1 : Puissance entière


Essayons d’écrire une fonction puissance(x,n) prenant en
paramètre un réel non nul x, un entier naturel n, et renvoie x n .
Complexité d’un algorithme

Exemple 1 : Puissance entière


Essayons d’écrire une fonction puissance(x,n) prenant en
paramètre un réel non nul x, un entier naturel n, et renvoie x n .
Méthode naïve
Complexité d’un algorithme

Exemple 1 : Puissance entière


Essayons d’écrire une fonction puissance(x,n) prenant en
paramètre un réel non nul x, un entier naturel n, et renvoie x n .
Méthode naïve
1 def puissance1(x,n):
2 if n==0:
3 return 1
4 p=x
5 for i in range(1,n):
6 p = p∗x
7 return p
Complexité d’un algorithme

Exemple 1 : Puissance entière


Essayons d’écrire une fonction puissance(x,n) prenant en
paramètre un réel non nul x, un entier naturel n, et renvoie x n .
Méthode naïve
1 def puissance1(x,n):
2 if n==0:
3 return 1
4 p=x
5 for i in range(1,n):
6 p = p∗x
7 return p

On peut aussi utiliser la récursivité


Complexité d’un algorithme

Exemple 1 : Puissance entière


Essayons d’écrire une fonction puissance(x,n) prenant en
paramètre un réel non nul x, un entier naturel n, et renvoie x n .
Méthode naïve
1 def puissance1(x,n):
2 if n==0:
3 return 1
4 p=x
5 for i in range(1,n):
6 p = p∗x
7 return p

On peut aussi utiliser la récursivité

1 def puissancerec(x,n):
2 if n==0:
3 return 1
4 else :
5 return x∗puissancerec(x,n−1)
Complexité d’un algorithme

Exemple 1 : Puissance entière


Essayons d’écrire une fonction puissance(x,n) prenant en
paramètre un réel non nul x, un entier naturel n, et renvoie x n .
Méthode naïve
1 def puissance1(x,n):
2 if n==0:
3 return 1
4 p=x
5 for i in range(1,n):
6 p = p∗x
7 return p

On peut aussi utiliser la récursivité

1 def puissancerec(x,n):
2 if n==0:
3 return 1
4 else :
5 return x∗puissancerec(x,n−1)

C’est un algorithme de complexité Θ(n).


Complexité d’un algorithme

Stratégie "diviser pour régner"


On calcule x n de la façon suivante :

 1

n
si n = 0
n (x ) 2 si n et pair
x = 2
n−1
2

x(x 2 ) si n et impair

Complexité d’un algorithme

Stratégie "diviser pour régner"


On calcule x n de la façon suivante :

 1

n
si n = 0
n (x ) 2 si n et pair
x = 2
n−1
2

x(x 2 ) si n et impair

1 def puissance2(x,n):
2 if n==0:
3 return 1
4 if n%2 == 0:
5 return puissance2(x,n//2)∗∗2
6 else :
7 return x∗puissance2(x,(n−1)//2)∗∗2

Exercice :
1 Montrer que le nombre d’appels dans la fonction
précédente est égal à blog2 (n)c + 1.
2 En déduire la complexité cet algorithme.

Vous aimerez peut-être aussi