P96 Etats
P96 Bébés
P96 Infirmières
P96-Cat-1
P96-Cat-2
 
Thème 1
Thème 2
Thème 3
Thème 4
Thème 5
Sommaire
Séance 6
Thème 7
Thème 8
Thème 9
Thème 10
 


Ce document (ici l'original) a été remis en page et modifié à partir de celui écrit par Jean Marc FEDOU.



 
 

Algorithme et Complexité

Notion d'algorithme


Complexités d'un algorithme

La complexité d'un algorithme se mesure essentiellement en calculant le nombre d'opérations élémentaires pour traiter une donnée de taille n. Les opérations élémentaires considérées sont
Le coût d'un algorithme A pour une donnée D est le nombre d'opérations élémentaires nécessaires au traitement de la donnée D et est noté 
Il est quelquefois nécessaire d'étudier la complexité en mémoire lorsque l'algorithme requiert de la mémoire supplémentaire (tableau auxiliaire de même taille que le tableau donné en entrée par exemple).


Exemple de calcul de complexité d'un algorithme : apparition d'un nombre dans un tableau.

Soit T un tableau de taille N contenant des nombres entiers de 1 à k. Soit a un entier entre 1 et k.
La fonction suivante retourne 1 lorsque l'un des éléments du tableau est égal à a, et 0 sinon.
Trouve:=proc(T,n,a)
        local i;
        for i from 1 to n do
                if T[i]=a then RETURN(i) fi;
        od;
        RETURN(0);
end;
Cas le pire : N (le tableau ne contient pas a)
Cas le meilleur : 1 (le premier élément du tableau est a)
Complexité moyenne : Si les nombres entiers de 1 à k apparaissent de manière équiprobable, on peut montrer que le cout moyen de l'algorithme est
                                                N

                                k (1 - (1 - 1/k) ).
De fait les cas où l'on peut explicitement calculer la complexité en moyenne sont rares. Cette étude est un domaine à part entière de l'algorithmique que nous aborderons assez peu ici. Toutefois, il est indispensable, après avoir écrit un algorithme, de calculer sa complexité dans le pire des cas et dans le meilleur des cas.


Analyse asymptotique

c1.g(n) < f(n) < c2.g(n).
Remarquons que cette relation est réflexive.
f(n) < c.g(n),
c'est dire que f est bornée par g à un facteur multiplicatif près.
Cette relation n'est pas réflexive.