Complexité Asymptotique et Spatiale
Complexité Asymptotique et Spatiale
El Houssaine OUTFARDINE
CPGE Tanger
Lycee Moulay EL-Hassan
[Link]@[Link]
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Plan
1 Introduction
3 Type de complexité
4 Complexité asymptotique
6 complexité spatiale
Complexité Algorithmique 1 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Exercice
Ecrire en python une fonction qui prend en argument une chaîne de caractères et
détermine si le caractère ’a’ est présent dans la chaîne (on retourne soit True soit False).
Complexité Algorithmique 2 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Solution 1 :
def contienta1(chaine):
k=0
N=len(chaine)
trouve=False
while(trouve == False and k < N):
if chaine[k]=='a':
trouve = True
k=k+1
return trouve
Solution 2 :
def contienta2(chaine):
for i in range(len(chaine)):
if chaine[i]=='a':
return True
return False
Complexité Algorithmique 3 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Solution 3 :
def contienta3(chaine):
n=[Link]('a')
return bool(n)
Solution 4 :
def contienta4 (chaine):
return ('a' in chaine)
Complexité Algorithmique 4 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Solution 3 :
def contienta3(chaine):
n=[Link]('a')
return bool(n)
Solution 4 :
def contienta4 (chaine):
return ('a' in chaine)
Complexité Algorithmique 4 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Solution 3 :
def contienta3(chaine):
n=[Link]('a')
return bool(n)
Solution 4 :
def contienta4 (chaine):
return ('a' in chaine)
Remarque 1
on s’intéressera plus, dans ce cours, à la complexité temporelle.
On ne mesure pas le temps d’exécution des algorithmes d’une façon expérimentale car ces
mesures vont dépendre de la machine utilisée. On estime donc ce temps d’exécution d’une
façon théorique en utilisant des unités de temps abstraites correspondant au nombre
d’opérations effectuées.
Complexité Algorithmique 4 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Introduction
La complexité d’un algorithme est une mesure de la quantité de ressources nécessaires
à son exécution. On distingue deux types de complexité :
Complexité temporelle : mesure le temps de calcul consommé lors de l’exécution
d’un programme.
Complexité spatiale : mesure le nombre d’emplacement mémoire occupé lors de
l’exécution d’un programme.
Complexité Algorithmique 5 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Introduction
La complexité d’un algorithme est une mesure de la quantité de ressources nécessaires
à son exécution. On distingue deux types de complexité :
Complexité temporelle : mesure le temps de calcul consommé lors de l’exécution
d’un programme.
Complexité spatiale : mesure le nombre d’emplacement mémoire occupé lors de
l’exécution d’un programme.
Remarque 2
1 Dans ce cours on s’intéresse à la complexité temporelle.
2 On ne mesure pas le temps d’exécution des algorithmes d’une façon expérimentale car ces
mesures vont dépendre de la machine utilisée. On estime donc ce temps d’exécution d’une
façon théorique en utilisant des unités de temps abstraites correspondant au nombre
d’opérations effectuées.
3 La complexité d’un programme peut augmenter quand la taille des données d’entrée
devient importante. Nous estimerons par conséquent la complexité d’un algorithme
comme fonction de la taille (ou valeurs) des données d’entrée qu’on appel un paramètre
de complexité.
Complexité Algorithmique 5 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
opération de base
On appelle opération de base, ou opération élémentaire, toute :
Affectation
Test de comparaison : ==, ≥, ≤, != ...
Opération de lecture et écriture
Opération arithmétique : +, -,*, / ....
On considère que toutes ces opérations élémentaires ont le même coût qui égale à 1,
indépendamment des données d’entrée.
Complexité Algorithmique 6 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
opération de base
On appelle opération de base, ou opération élémentaire, toute :
Affectation
Test de comparaison : ==, ≥, ≤, != ...
Opération de lecture et écriture
Opération arithmétique : +, -,*, / ....
On considère que toutes ces opérations élémentaires ont le même coût qui égale à 1,
indépendamment des données d’entrée.
Exemple 1
S=1 # instruction 1
S=S*n # instruction 2
S=S-n # instruction 3
Complexité :
Cinstruction1 + Cinstruction2 + Cinstruction3 = 1 + 2 + 2 = 5
Complexité Algorithmique 6 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Complexité Algorithmique 7 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Complexité Algorithmique 7 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Exemple 2
if i % 2= = 0 : #test
n = i // 2 #bloc 1
else :
i = i+1 #bloc 2
n = i #bloc 2
Complexité Algorithmique 7 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Exemple 2
if i % 2= = 0 : #test
n = i // 2 #bloc 1
else :
i = i+1 #bloc 2
n = i #bloc 2
Complexité Algorithmique 7 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
for i in range(n):
# Bloc d'instructions Q
Complexité Algorithmique 8 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
for i in range(n):
# Bloc d'instructions Q
Complexité :
n−1
C= ∑ CQ
i=0
Complexité Algorithmique 8 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
for i in range(n):
# Bloc d'instructions Q
Complexité :
n−1
C= ∑ CQ
i=0
while test :
# Bloc d'instructions Q
Complexité Algorithmique 8 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
for i in range(n):
# Bloc d'instructions Q
Complexité :
n−1
C= ∑ CQ
i=0
while test :
# Bloc d'instructions Q
Complexité :
C= ∑ Ctest + ∑ CQ
Complexité Algorithmique 8 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Exemple 3
s=0
for i in range(n+1):
s=s+1
Complexité Algorithmique 9 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Exemple 3
s=0
for i in range(n+1):
s=s+1
Compléxité :
n n
C = 1 + ∑ Ctest = 1 + ∑ 2 = 1 + 2(n + 1) = 2n + 3
0 0
Complexité Algorithmique 9 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Exemple 4
for i in range(n):
for j in range(n):
s=s+1 # instruction 1
print(s) # instruction 2
Complexité Algorithmique 10 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Exemple 4
for i in range(n):
for j in range(n):
s=s+1 # instruction 1
print(s) # instruction 2
Compléxité :
Complexité Algorithmique 10 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Exemple 5
i=0
s=0
while i <= n):
s=s+i # instruction 1
i=i+1 # instruction 2
Complexité Algorithmique 11 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Exemple 5
i=0
s=0
while i <= n):
s=s+i # instruction 1
i=i+1 # instruction 2
Compléxité :
n+1 n n+1 n
C = 2+ ∑ Ctest + ∑ (C1 + C2 ) = 2 + ∑ 1 + ∑ (2 + 2)
i=0 i=0 i=0 i=0
= 2 + n + 2 + 4(n + 1) = 5n + 8
Complexité Algorithmique 11 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Complexité Algorithmique 12 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Type de complexité
Complexité Algorithmique 13 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Type de complexité
Complexité Algorithmique 13 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Type de complexité
Complexité Algorithmique 13 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Type de complexité
Remarque 3
Généralement, on s’intéresse à la complexité dans le pire des cas, car cela correspond à la
performance de l’algorithme lorsqu’il prend le plus de temps : il ne prendra jamais plus de
temps que ce qu’on a estimé.
Complexité Algorithmique 13 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Type de complexité
Exemple 6
recherche d’un élément X dans un tableau T :
def recherche(X,T):
n=len(T)
for i in range(n):
if X == T[i]:
return True
return False
Complexité Algorithmique 14 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Type de complexité
Exemple 6
recherche d’un élément X dans un tableau T :
def recherche(X,T):
n=len(T)
for i in range(n):
if X == T[i]:
return True
return False
Meilleur des cas : lorsque X est égal au premier élément de T. On effectue donc
une comparaison et un return, d’où C = 4
Complexité Algorithmique 14 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Type de complexité
Exemple 6
recherche d’un élément X dans un tableau T :
def recherche(X,T):
n=len(T)
for i in range(n):
if X == T[i]:
return True
return False
Meilleur des cas : lorsque X est égal au premier élément de T. On effectue donc
une comparaison et un return, d’où C = 4
Pire des cas : lorsque X n’est pas dans T ou bien il est le dernier. On effectue
n = len(T ) comparaisons et un return C = 2 + ∑ni=−01 1 + 1 = 3 + n
Complexité Algorithmique 14 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Type de complexité
Complexité Algorithmique 15 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Type de complexité
Complexité Algorithmique 15 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Type de complexité
(n + 1)
C = 2+
2
Complexité Algorithmique 15 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
Il est souvent inutile d’évaluer de façon exacte le nombre d’opérations effectuées par
un algorithme, on fait recours donc à une approximation de ce nombre d’opérations
représentant ce qu’on appel ordre de grandeur de la complexité.
Définition 1
On dit que une fonction f est dominée par une fonction g si et seulement si :
Complexité Algorithmique 16 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
Il est souvent inutile d’évaluer de façon exacte le nombre d’opérations effectuées par
un algorithme, on fait recours donc à une approximation de ce nombre d’opérations
représentant ce qu’on appel ordre de grandeur de la complexité.
Définition 1
On dit que une fonction f est dominée par une fonction g si et seulement si :
Complexité Algorithmique 16 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
Remarque 4
Si f = O(g) et g = O(h) alors f = O(h)
si f = O(g) et k une constante alors k ∗ f = O(g)
si f1 = O(g1 ) et f2 = O(g2 ) alors :
f1 + f2 = O(g1 + g2 )
f1 ∗ f2 = O(g1 ∗ g2 )
Complexité Algorithmique 17 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
Remarque 4
Si f = O(g) et g = O(h) alors f = O(h)
si f = O(g) et k une constante alors k ∗ f = O(g)
si f1 = O(g1 ) et f2 = O(g2 ) alors :
f1 + f2 = O(g1 + g2 )
f1 ∗ f2 = O(g1 ∗ g2 )
Règles de simplification :
Complexité Algorithmique 17 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
Exemple 7
f (n) = n3 + 2n2 + 4n + 2 = O(n3 ) (si n ≥ 1 alors f (n) ≤ 8n3 )
f (n) = nlog(n) + 12n + 888 = O(nlog(n))
2n
f (n) = 1000n1 0 − n7 + 12n4 + 1000 = O(2n )
Complexité Algorithmique 18 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Complexité Algorithmique 19 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Complexité Algorithmique 20 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
Complexité Algorithmique 21 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
def factorielle(n):
fact=1
for i in range(2,n+1):
fact=fact*i
return fact
Complexité Algorithmique 21 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
def factorielle(n):
fact=1
for i in range(2,n+1):
fact=fact*i
return fact
Complexité Algorithmique 21 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
Complexité Algorithmique 22 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
def sansDoublons(T) :
n= len(T)
for i in range (n-1) :
for j in range (i +1, n) :
if (T[i] = = T[j]) :
return False
return True
Complexité Algorithmique 22 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
def sansDoublons(T) :
n= len(T)
for i in range (n-1) :
for j in range (i +1, n) :
if (T[i] = = T[j]) :
return False
return True
Dans le pire des cas le programme ne va pas trouver de doublons et retourne True,
donc il va comparer tous les éléments du tableau entre eux.
Dans le meilleur des cas les deux premiers éléments de T sont identiques (une
seule comparaison et un return) on aura donc une complexité constante O(1)
Complexité Algorithmique 22 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
Complexité Algorithmique 23 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
Complexité Algorithmique 23 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
Complexité Algorithmique 24 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
Complexité Algorithmique 24 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
p−1
!!
n−1 m−1 n−1 m−1
C(n) = 6 + nm + 1 + ∑ ∑ 2+ ∑ 3 + 1 = 8 + nm + ∑ ∑ (2 + 3p)
i=0 j=0 k =0 i=0 j=0
Complexité Algorithmique 24 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Notation O
p−1
!!
n−1 m−1 n−1 m−1
C(n) = 6 + nm + 1 + ∑ ∑ 2+ ∑ 3 + 1 = 8 + nm + ∑ ∑ (2 + 3p)
i=0 j=0 k =0 i=0 j=0
Si les matrice A et B sont des matrices carrées alors n=m=p ce qui donne une
complexité en O(n3 )
Complexité Algorithmique 24 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Complexité Algorithmique 25 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
Suites arithmético-géométriques
Définition 2
Une suite réelle (Un )n∈N est dite arithmético-géométrique si :
∀a, b ∈ R tq ∀n ∈ N∗ Un = aUn−1 + b
Complexité Algorithmique 26 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
Suites arithmético-géométriques
Exemple 11
def factorielle(n) :
if n<=1:
return 1
else :
return n*factorielle(n-1)
Complexité Algorithmique 27 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
Suites arithmético-géométriques
Exemple 11
def factorielle(n) :
if n<=1:
return 1
else :
return n*factorielle(n-1)
Complexité Algorithmique 27 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
Suites arithmético-géométriques
Exemple 11
def factorielle(n) :
if n<=1:
return 1
else :
return n*factorielle(n-1)
Complexité Algorithmique 27 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
Suites arithmético-géométriques
Exemple 11
def factorielle(n) :
if n<=1:
return 1
else :
return n*factorielle(n-1)
Complexité Algorithmique 27 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
Suites arithmético-géométriques
Exemple 11
def factorielle(n) :
if n<=1:
return 1
else :
return n*factorielle(n-1)
Complexité Algorithmique 27 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
Complexité Algorithmique 28 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
Les constantes λ et µ se déterminent à l’aide des valeurs des deux premiers termes de
la suite.
Complexité Algorithmique 28 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
Complexité Algorithmique 29 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
def fibo(n):
if n<2:
return n
else :
return fibo(n-1)+fibo(n-2)
Complexité Algorithmique 30 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
def fibo(n):
if n<2:
return n
else :
return fibo(n-1)+fibo(n-2)
Si n > 2, on effectue une comparaison et une addition entre deux appels récursifs. Si
n = 0 ou n = 1, seule la comparaison a [Link] a ainsi :
C(n − 1) + C(n − 2) + 2 si n ≥ 2
C(n) = (1)
1 sinon
Complexité Algorithmique 30 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
def fibo(n):
if n<2:
return n
else :
return fibo(n-1)+fibo(n-2)
Si n > 2, on effectue une comparaison et une addition entre deux appels récursifs. Si
n = 0 ou n = 1, seule la comparaison a [Link] a ainsi :
C(n − 1) + C(n − 2) + 2 si n ≥ 2
C(n) = (1)
1 sinon
La complexité est donc une suite récurrente linéaire non homogène d’ordre deux. Cette
récurrence est aussi vraie pour n + 1 :
C(n) + C(n − 1) + 2 si n ≥ 2
C(n + 1) = (2)
1 sinon
Complexité Algorithmique 30 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
Complexité Algorithmique 31 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
Cette nouvelle équation est une équation homogène dont l’équation caractéristique
est :
X3 − 2X2 + 1 = (X − 1)(X2 − X − 1) = 0
Complexité Algorithmique 31 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
Cette nouvelle équation est une équation homogène dont l’équation caractéristique
est :
X3 − 2X2 + 1 = (X − 1)(X2 − X − 1) = 0
et dont les racines sont :
√ √
1+ 5 1− 5
X1 = et X2 = et X3 = 1
2 2
Complexité Algorithmique 31 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
Cette nouvelle équation est une équation homogène dont l’équation caractéristique
est :
X3 − 2X2 + 1 = (X − 1)(X2 − X − 1) = 0
et dont les racines sont :
√ √
1+ 5 1− 5
X1 = et X2 = et X3 = 1
2 2
√ !n √ !n √ !n !
1+ 5 1− 5 1+ 5
∃µ, λ, γ ∈ R, C(n) = λ +µ +γ = O
2 2 2
Complexité Algorithmique 31 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Récursivités simples
Cette nouvelle équation est une équation homogène dont l’équation caractéristique
est :
X3 − 2X2 + 1 = (X − 1)(X2 − X − 1) = 0
et dont les racines sont :
√ √
1+ 5 1− 5
X1 = et X2 = et X3 = 1
2 2
√ !n √ !n √ !n !
1+ 5 1− 5 1+ 5
∃µ, λ, γ ∈ R, C(n) = λ +µ +γ = O
2 2 2
Complexité Algorithmique 31 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Principe
La méthode de diviser pour régner est une méthode qui permet, parfois de trouver des
solutions efficaces à des problèmes algorithmiques. Elle se fait en trois étapes :
Diviser : on divise les données initiales en plusieurs sous-parties.
Régner : on résout récursivement chacun des sous problèmes associés (ou on les
résout directement si leur taille est assez petite).
Combiner : combiner les différents résultats obtenus pour obtenir une solution au
problème initial.
Complexité Algorithmique 32 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Complexité Algorithmique 33 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Théorme génerale
Soit C(n) une fonction définie par l’équation de récurrence suivante :
n
T (n) = aT ( ) + O(nk )
b
Complexité Algorithmique 34 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Complexité Algorithmique 35 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
On a :
n
T (n) = O(1) + T ( ) et T (0) = O(1)
2
On a : a = 1 et b = 2, f (n) = O(1) donc k = 0 et a = bk = 1
D’où d’après le théorème général : T (n) = O(log2 (n))
Complexité Algorithmique 35 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Une autre façon de résoudre une équation de récurrence est de substituer, de façon
répétitive, la définition de la fonction dans le coté droit de son équation jusqu’à ce
qu’une forme simple soit obtenue.
Exemple 14
T (n − 1) + 2 si n > 1
T (n) =
1 sinon
Complexité Algorithmique 36 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Une autre façon de résoudre une équation de récurrence est de substituer, de façon
répétitive, la définition de la fonction dans le coté droit de son équation jusqu’à ce
qu’une forme simple soit obtenue.
Exemple 14
T (n − 1) + 2 si n > 1
T (n) =
1 sinon
Complexité Algorithmique 36 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Exemple 15
T (n − 1) + n si n > 1
T (n) =
1 si n = 1
Complexité Algorithmique 37 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Exemple 15
T (n − 1) + n si n > 1
T (n) =
1 si n = 1
Complexité Algorithmique 37 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Exemple 16
2T ( n2 ) + n
si n > 1
T (n) =
1 si n = 1
Complexité Algorithmique 38 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Exemple 16
2T ( n2 ) + n
si n > 1
T (n) =
1 si n = 1
Complexité Algorithmique 38 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Exemple 17
C( n2 ) + 1
si n > 1
C(n) =
1 si n = 1
Montrons que : C(n) = 1 + log2 (n)
Complexité Algorithmique 39 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
Exemple 17
C( n2 ) + 1
si n > 1
C(n) =
1 si n = 1
Montrons que : C(n) = 1 + log2 (n)
Complexité Algorithmique 39 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
complexité spatiale
De la même façon qu’on définit la complexité temporelle d’un algorithme pour évaluer
ses performances en temps de calcul, on peut définir sa complexité spatiale pour
évaluer sa consommation en espace mémoire. Le principe est le même sauf qu’ici on
cherche à évaluer l’ordre de grandeur du volume en mémoire utilisé : il ne s’agit pas
d’évaluer précisément combien d’octets sont consommés par un algorithme mais de
préciser son taux de croissance (ordre de grandeur) en fonction de la taille de l’entrée.
Complexité Algorithmique 40 / 40
Introduction Calcul du coût d’un algorithme Type de complexité Complexité asymptotique Complexité des fonctions récursives complexité spatiale
complexité spatiale
De la même façon qu’on définit la complexité temporelle d’un algorithme pour évaluer
ses performances en temps de calcul, on peut définir sa complexité spatiale pour
évaluer sa consommation en espace mémoire. Le principe est le même sauf qu’ici on
cherche à évaluer l’ordre de grandeur du volume en mémoire utilisé : il ne s’agit pas
d’évaluer précisément combien d’octets sont consommés par un algorithme mais de
préciser son taux de croissance (ordre de grandeur) en fonction de la taille de l’entrée.
les variables simples (entiers, booléens, flottants) occupent un espace constant
O(1) qui ne dépend pas de l’entrée.
La taille d’un tableau est en grand O du produit de ces dimensions :
Un tableau à une dimension de N éléments est en O(N ).
une matrice NxM est en O(MN )
Les chaînes de caractères sont en grand O de leur longueur.
Complexité Algorithmique 40 / 40