Vous êtes sur la page 1sur 5

1LISI ASD et complexité Mme. R.

BOUHOUCH

Introduction à la complexité
I- Définitions
1. Définition1 : Algorithme
Th. H. Cormen, Ch. E. Leiserson, R. L. Rivest, C. Stein2, ont donné cette définition :
"Procédure de calcul bien définie qui prend en entrée une valeur, ou un ensemble de valeurs, et
qui donne en sortie une valeur, ou un ensemble de valeurs. Un algorithme est donc une séquence
d’étapes de calcul qui transforment l’entrée en sortie."
2. Définition 2 : Complexité d’un algorithme
La complexité d’un algorithme est le nombre d’opérations élémentaires qu’il doit effectuer pour
mener à bien un calcul en fonction de la taille des données d’entrée.
Pour Stockmeyer et Chandra, "l’efficacité d’un algorithme est mesurée par l’augmentation du
temps de calcul en fonction du nombre des données."
Nous avons donc deux éléments à prendre en compte :
 la taille des données ;
 le temps de calcul.

La théorie de la complexité est une branche de l’informatique théorique. Elle cherche à calculer,
formellement, la complexité algorithmique nécessaire pour résoudre un problème
algorithmique P au moyen de l’exécution d’un algorithme A. La complexité d’un algorithme A
est le calcul de la quantité de ressources (temps t et/ou espace mémoire s) nécessaire pour
résoudre P au moyen de l’exécution de A en fonction de la taille n de P et indépendamment de
la performance de la machine de l’exécution.
La théorie de la complexité vise à répondre aux besoins d’efficacité des algorithmes
(programmes). Elle permet :
• Classer les problèmes selon leur difficulté.
• Classer les algorithmes selon leur efficacité.
• Comparer les algorithmes résolvant un problème donné afin de faire un choix sans
devoir les implémenter.
On ne mesure pas la durée en heure, minute, seconde… cela impliquerait d’implémenter les
algorithmes qu’on veut comparer. Ces mesures ne seraient pas pertinentes car le même
algorithme sera plus rapide sur une machine plus puissante, au lieu de ça, on utilise des unités
de temps abstraite proportionnelles au nombre d’opérations effectuées. Au besoin, on pourra
alors adapter ces quantités en fonction de la machine sur laquelle l’algorithme s’exécute.

1
1LISI ASD et complexité Mme. R.BOUHOUCH

Dans ce cas les étapes de résolution d’un problème :


1- Trouver différents algorithmes (selon ≠ méthodes de conception)
2- Analyser leur efficacité (en termes de temps, espace mémoire,...)
3- Choisir le meilleur algorithme (selon la taille de l'exemplaire, puissance du matériel,
ordre,...)
II- La taille des données
La taille des données (ou des entrées) va dépendre du codage de ces entrées. On choisit comme
taille la ou les dimensions les plus significatives. Par exemple, en fonction du problème, les
entrées et leur taille peuvent être :
– des éléments : le nombre d’éléments ;
– des nombres : nombre de bits nécessaires a la représentation de ceux-là ;
– des polynômes : le degré, le nombre de coefficients non nuls ;
– des matrices m × n : max(m, n), m*n, m + n ;
– des graphes : nombre de sommets, nombre d’arcs, produit des deux ;
– des listes, tableaux, fichiers : nombre de cases, d’éléments ;
– des mots : leur longueur.

III- Le temps de calcul


Le temps de calcul d’un programme dépend de plusieurs éléments :
– la quantité de données bien sûre ;
– mais aussi de leur encodage ;
– de la qualité du code engendre par le compilateur ;
– de la nature et la rapidité des instructions du langage ;
– de la qualité de la programmation ;
– et de l’efficacité de l’algorithme.
Nous ne voulons pas mesurer le temps de calcul par rapport à toutes ces variables. Mais nous
cherchons à calculer la complexité des algorithmes qui ne dépendra ni de l’ordinateur, ni du
langage utilisé, ni du programmeur, ni de l’implémentation. Pour cela, nous allons nous mettre
dans le cas où nous utilisons un ordinateur RAM (Random Access Machine) :
– ordinateur idéalisé ;
– mémoire infinie ;
– accès à la mémoire en temps constant ;
– généralement a processeur unique (pas d’opérations simultanées).

2
1LISI ASD et complexité Mme. R.BOUHOUCH

Pour connaitre le temps de calcul, nous choisissons une opération fondamentale et nous
calculons le nombre d’opérations fondamentales exécutées par l’algorithme.
IV- Operations fondamentales
C’est la nature du problème qui fait que certaines opérations deviennent plus fondamentales
que d’autres dans un algorithme.
Par exemple :

V- Exemple :

Problème (plus grand diviseur)


Décrire une méthode de calcul du plus grand diviseur autre que lui-même d’un entier n ≥ 2.
Notons pgd(n) le plus grand diviseur en question. On a :
1 ≤pgd(n) ≤n-1 ; pgd(n) = 1 →n est premier.
Algorithme (1)
Puisqu’il s’agit de trouver le plus grand diviseur, on peut procéder en décroissant sur les
diviseurs possibles :

Algorithme (2)

3
1LISI ASD et complexité Mme. R.BOUHOUCH

Remarque : le résultat cherché est n ÷ p, où p est le plus petit diviseur supérieur ou égal à 2 de
n.
Notons ppd(n) le plus petit diviseur en question.

Algorithme (3)
On peut maintenant tenir compte de ce que : n non premier →2≤ ppd(n) ≤pgd(n) ≤n-1:
D’où il vient que :
n non premier→ (ppd(n))2 ≤n:

Ceci permet d’améliorer le temps de calcul pour les nombres premiers : il est donc inutile de
chercher en croissant entre ⌊√𝑛⌋ + 1 et n.
En procédant en croissant sur les diviseurs possibles :

4
1LISI ASD et complexité Mme. R.BOUHOUCH

Analyse des trois algorithmes


Calcul des complexités temporelles pratiques des solutions (1), (2) et (3) : Leurs formulations
sont du type :
A1
tant que C : A2
A3
Pour un algorithme donné, soient t1, tC , t2 et t3 les temps d’exécution respectifs des actions A1,
C, A2 et A3.
Hypothèse : la boucle représentée en machine par un branchement conditionnel et un
branchement inconditionnel ; temps d’exécution respectifs : tBC et tBI.
Le temps d’exécution est donc :
t1 + (tBC + tC + t2 + tBI)B(n) + tC + tBC + t3;
où B(n) est le nombre de boucles exécutées.

Retenir
Sur une machine où les opérations sur les entiers s’effectuent en temps constant, le temps
d’exécution est donc de la forme :
a B(n) + b
où a et b sont des constantes.
Borne maximale :
Pour les solutions (1) et (2) B(n) ≤ n-2
Pour la solution (3) B(n) ≤⌊√𝑛⌋-1
Complexité temporelle maximale :
Pour les solutions (1) et (2) a’n + b’
Pour la solution (3) a’⌊√𝑛⌋+b’