0% ont trouvé ce document utile (0 vote)
119 vues20 pages

Complexité

Ce document traite de la théorie de la complexité des algorithmes. Il présente les notions de complexité temporelle et spatiale d'un algorithme et les outils pour les mesurer, tels que les opérations fondamentales et la taille des données. Il introduit également les notations 'o' et 'O' pour comparer les taux de croissance des fonctions de complexité, et classe les principales fonctions selon leur complexité.

Transféré par

mlmlml Douna7
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
0% ont trouvé ce document utile (0 vote)
119 vues20 pages

Complexité

Ce document traite de la théorie de la complexité des algorithmes. Il présente les notions de complexité temporelle et spatiale d'un algorithme et les outils pour les mesurer, tels que les opérations fondamentales et la taille des données. Il introduit également les notations 'o' et 'O' pour comparer les taux de croissance des fonctions de complexité, et classe les principales fonctions selon leur complexité.

Transféré par

mlmlml Douna7
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

Algorithmique et Structures de données

Complexité des algorithmes

Abdelkamel, Ben Ali

Université d’El Oued

Décembre 2020

Licence 2 d’informatique
Théorie de complexité

Théorie de complexité, a pour but de :


Fournir les outils mathématiques nécessaires à l’analyse des
performances d’un algorithme
Avoir une idée de ce qui est faisable et infaisable actuellement
Ce qui permet de :
Améliorer les performances des problèmes faciles
Savoir comment aborder les problèmes difficiles

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 2/20


Complexité d’un algorithme

Un programme qui s’exécute consomme de l’espace mémoire


et du temps de calcul :
Complexité temporelle (plus intéressante)
Complexité spatiale
Le but est d’exprimer les performances d’un algorithme à
l’aide de fonctions qui dépendent de la taille des données

TALG (n) = ?

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 3/20


Mesures de la complexité

Pour mesurer la complexité temporelle d’un algorithme, on


s’intéresse plutôt aux opérations les plus coûteuses (FLOPS) pour
le problème de calcul particulier :
Racine carrée, Log, Exp, Addition réelle . . .
Comparaisons d’éléments dans le cas des tris . . .
et on calcule le nombre d’opérations fondamentales exécutées par
l’algorithme.

Problème Opérations fondamentales


Recherche d’une valeur dans un comparaisons entre les éléments du
tableau tableau
Multiplication des matrices réelles Multiplication scalaire
Addition des entiers binaires Opération binaire

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 4/20


Mesures de la complexité

Le temps de l’exécution dépend de la taille de l’entrée. On veut


considérer seulement la taille essentielle de l’entrée.
Cela peut être par exemple :
le nombre d’éléments combinatoires dans l’entrée
le nombre de bits pour représenter l’entrée
etc . . .

Problème Taille de la donnée


Recherche d’une valeur dans un Nombre d’éléments dans
tableau le tableau
Multiplication des matrices réelles Dimensions des matrices
Addition des entiers Nombre des bits pour représenter les
binaires entiers

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 5/20


Mesures de complexité

Complexité moyenne
Complexité dans le pire des cas

Exemple : Pour la recherche séquentielle (exercice TD) dans


un tableau de n éléments, on fait n/2 comparaisons en
moyenne et n comparaisons dans le pire des cas.

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 6/20


Mesures de complexité
Soit A un algorithme
Dn l’ensemble des entrées de taille n
I ∈ Dn une entrée

Définition :
1 coutA (I ) = Nb d’opérations fondamentales exécutées par A sur I
2 la complexité de A en pire cas :

MaxA (n) = Max {coutA (I ), I ∈ Dn }

3 Soit Pr une distribution de probabilités sur Dn


la complexité de A en moyenne :
X
MoyA (n) = Pr [I ].coutA (I )
I ∈Dn

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 7/20


Mesures de complexité
Exemple : Recherche Séquentielle
int index_of_value ( double v [] , int n , int x )
{
int j = 0;

while ( j < n )
{
if ( v [ j ] == x )
return j ;
j = j + 1;
}

return -1;
}

Opération de base : comparaison de x avec un élément de v .


Complexité en pire cas de RS :

MaxRS (n) = n

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 8/20


Mesures de complexité
Complexité en moyenne de RS :
On suppose que :
tous les éléments sont distincts
Pr [x ∈ v ] = q
si x ∈ v alors toutes les places sont équiprobables
Pour 1 ≤ i ≤ n soit
Ii = {(v , x ), x ∈ v }
et
In+1 = {(v , x ), x ∈
/ v}
On a :
Pr [Ii ] = q/n pour 1 ≤ i ≤ n et coutRS (Ii ) = i
et
Pr [In+1 ] = 1 − q et coutRS (In+1 ) = n

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 9/20


Mesures de complexité

Pn+1
MoyRS (n) = i=1 Pr [Ii ] · coutRS (Ii )
Pn q q Pn
= i=1 n (i ) + (1 − q) · n = n i=1 (i ) + (1 − q) · n

q n(n+1)
= n · 2 + (1 − q) · n = (1 − q2 ) · n + q
2

si q = 1 alors MoyRS (n) = (n + 1)/2


si q = 1/2 alors MoyRS (n) = (3n + 1)/4

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 10/20


Notations utilisées

Il faut comparer les taux d’accroissement de différentes fonctions


qui mesurent les performances d’un algorithme.

Notation ”o”
On dit que f (x ) = o(g(x )) pour x −→ ∞ si

f (x )
lim =0
x −→∞ g(x )

Ce que veut dire que f croı̂t plus lentement que g quand x est très
grand. Par exemple :
x 2 = o(x 5 ) sin x = o(x )

14.079 x = o(x /2 + 7 cos x ) 23 log x = o(x 0.002 )

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 11/20


Notations utilisées

Notation ”O”
On dit que f (x ) = O(g(x )) s’il existe k et x0 tels que :

x > x0 f (x ) < kg(x )

La notation o est plus précise que O, mais O est plus facile à


calculer et suffisant. Par exemple :

sin(x ) = O(x ) sin x = O(1)

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 12/20


Un classement des fonctions


log(n)  n  n  n log(n)  n2 
n
n3  2n  exp(n)  n!  nn  22

O(1) Constant
O(log(n)) Logarithmique
O(n) Linéaire
n log(n) n log(n)
O(n2 ) Quadratique
O(n3 ) Cubique
O(2n ) Exponentiel

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 13/20


Algorithmes polynomiaux ↔ exponentiels

Complexité polynomiale ⇒ souvent réalisable


∃k > 0, f (n) ∈ O(n k ).
Complexité exponentielle ⇒ en général irréalisable
∃b > 1, b n ∈ O(f (n)).
Complexité doublement exponentielle
n
par exemple : f (n) = 22 .
Complexité sous-exponentielle

par exemple : f (n) = 2 n .


log(n)  n  n  n log(n)  n 2 
n
n 3  2n  exp(n)  n!  n n  22

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 14/20


Comparaison entre les différents groupes de fonctions

2 16 64 256
log log n 0 2 2.58 3
log n 1 4 6 8
n 2 16 64 256
n log n 2 64 384 2048
n2 4 256 4096 65536
2n 4 65536 1.84467e+19 1.15792e+77
n! 2 2.0923e+13 1.26887e+89 8.57539e+506
nn 4 1.84467e+19 3.9402e+115 3.2317e+616
2
2n 16 1.15792e+77 1.04438e+1233 2.00353e+19728

Méga = 106 (220 ), Géga = 109 (230 ), Tera = 1012 (240 ), Péta = 1015 (250 )
4 Ghz pendant 1 an = 1, 26 × 1017
4 Ghz pendant 4 Milliards d’années = 5 × 1026

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 15/20


Applications

Recherche dans un tableau


Recherche séquentielle
O(N )
10000 comparaisons dans un tableau de 10000 éléments

Recherche dichotomique
O(log2 N )
14 comparaisons dans un tableau de 10000 éléments

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 16/20


Applications
Multiplication de matrices (exercice TD)
Problème classique : C = A × B avec A et B matrices carrés d’ordre n.
n
X
Cij = Aik Bkj
k =1

for ( i = 0; i < n ; i ++)


{
for ( j = 0; j < n ; j ++)
{
C [ i ][ j ] = 0.;
for ( k = 0; k < n ; k ++)
{
C [ i ][ j ] += A [ i ][ k ]* B [ k ][ j ];
}
}
}

Complexité : O(N 3 )
benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 17/20
Applications

Multiplication de polynômes (Exercice TD)


P = ni=1 ai x i Q= m i
P P
i=1 bi x

PQ = n+m i avec
P P
i=1 ci x ck = i+j =k ai bj
d’où le programme

for ( i = 0; i < n + m ; i ++)


C [ i ] = 0.;
for ( i = 0; i < n ; i ++)
for ( j = 0; j < m ; j ++)
C [ i + j ] += A [ i ]* B [ j ];

Et sa complexité en O(mn)

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 18/20


Applications

Tri par sélection (Exercice TD)

void triSelection ( float t [] , int n )


{
int i , j , i_min ;
for ( i = 0; i < n - 1; i ++)
{
i_min = i ;
for ( j = i + 1; j < n ; j ++)
if ( t [ j ] < t [ i_min ])
i_min = j ;
if ( i_min > i )
echanger (t , min , i );
}
}

On fait (n − 1) + (n − 2) + (n − 3) + · · · + 2 + 1 comparaisons
On fait donc n(n − 1)/2 comparaisons → O(n 2 )

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 19/20


Applications

Exemple de tri par sélection

i
imin

benali-abdelkamel@[Link] (UE) Alg. et Structures de données 2020-2021 − Semestre 1 20/20

Vous aimerez peut-être aussi