Académique Documents
Professionnel Documents
Culture Documents
Algorithme
Prof. A.SABOUR
Objectifs du cours ...
Objectif :
Calculer la complexité d’un algorithme
Notation de Landau
2
Rappels : algorithmique I
Qu’est-ce que l’algorithmique ?
Définition 1 (Algorithme). Un algorithme est suite finie
d’opérations élémentaires constituant un schéma de
calcul ou de résolution d’un problème.
Double problématique de l’algorithmique ?
1. Trouver une méthode de résolution (exacte ou
approchée) du problème.
2. Trouver une méthode efficace.
3
Rappels : algorithmique I
Exemple 1:
problème : calculer xn
données : x : réel , n: entier
Méthode 1 : x0 = 1; xi = x* xi-1 i >0 T=n
Méthode 2 : x0 = 1; T = log n
xi = xi/2 * xi/2 , si i est pair;
xi = x*xi/2 * xi/2 si i est impair
...
résultats : y = xn
5
Pour comparer des solutions, plusieurs points
peuvent être pris en considération
6
Pour atteindre cet objectif, un algorithme utilise
deux ressources d’une machine: le temps et
l’espace mémoire.
8
Facteurs affectant le temps d’exécution:
1. machine,
2. langage,
3. programmeur,
4. compilateur,
5. algorithme et structure de données.
9
Exemples
Exemple 3 :
sum = 0;
for (i=0; i<n; i++)
for (j=0; j<n; j++)
sum++;
En revanche, dans ce cas, elle est fonction du
paramètre n
13
Problème!
Ces résultats dépendent
de la machine utilisée;
du jeu d’instructions utilisées
de l’habileté du programmeur
du jeu de données générées
du compilateur choisi
de l’environnement dans lequel est exécuté les deux
algorithmes (partagé ou non)
.... etc.
14
Méthode mathématique
15
Cette manière de procéder est justifiée par le fait que
la complexité d’un algorithme est en grande partie
induite par l’exécution des instructions qui le
composent.
16
Comment choisir entre plusieurs
solutions?
1. décompte des instructions
Reconsidérons la solution 1 (recherche
séquentielle) et faisons le décompte des
instructions. Limitons-nous aux instructions
suivantes:
18
Meilleur cas: notée par tmin(n) représentant la
complexité de l’algorithme dans le meilleur des cas en
fonction du paramètre n (ici le nombre d’éléments dans
le tableau).
!!!
20
Meilleur cas pour la recherche séquentielle :
Le cas favorable se présente quand la valeur C se
trouve au début du tableau
tmin(n) = e + 3t (une seule affectation et 3 test :
deux tests dans la boucle et un autre à l’extérieur de
la boucle)
Pire cas : Le cas défavorable se présente quand la
valeur C ne se trouve pas du tout dans le
tableau. Dans ce cas, l’algorithme aura à examiner,
tous les éléments.
tmax(n) = 1e + n(2t+1e+ 1a)+ 1t + 1t
= (n+1)e + na + (2n+2)t
21
Cas moyen: Comme les complexités favorable et défavorable sont
respectivement (e + 3t) et = (n+1)e + na + (2n+3)t, la compexité dans
le cas moyen va se situer entre ces deux valeurs. Son calcul se fait
comme suit:
Pour plus de simplicité, on suppose que C existe dans le tableau. On
suppose aussi que sa probabilité de présence dans l’une des positions
de ce tableau est de 1/n.
Si C est dans la position i du tableau, la complexité t(i) de l’algorithme
est:
n -1
Tmoy(n) = 1
n
(i 1)e ia (2i 2)t
i 0
= (n-1)(e+a+2t)/2 + e+4t
22
Complexité asymptotique
Le décompte d’instructions peut s’avérer fastidieux
à effectuer si on tient compte d’autres instructions
telles que :
accès à un tableau,
E/S, opérations logiques,
appels de fonctions,.. etc.
De plus, même en se limitant à une seule
opération, dans certains cas, ce décompte peut
engendrer des expressions que seule une
approximation peut conduire à une solution.
Par ailleurs, même si les opérations élémentaires
ont des temps d’exécution constants sur une
machine donnée, ils sont différents néanmoins
d’une machine à une autre.
23
Par conséquent :
Pour ne retenir que les caractéristiques
essentielles d’une complexité, et rendre ainsi
son calcul simple (mais indicatif!), il est
légitime d’ignorer toute constante pouvant
apparaître lors du décompte du nombre de fois
qu’une instruction est exécutée.
24
Ainsi, si
tmax(n) = (n+1)e + (n-1)a + (2n+1)t,
alors on dira que la complexité de cette
algorithme est tout simplement en n. On a
éliminé tout constante, et on a supposé aussi
que les opérations d’affectation, de test et
d’addition ont des temps constants.
25
Une notation mathématique, permettant de
représenter cette façon de procéder, est décrite dans
ce qui suit:
26
Notation grand-O
Définition: Soit T(n) une fonction non négative.
La notation grand-O
T(n) est dans O(f(n)) indique unedeux
s’il existe borne
constante
positives c et sur
supérieure n0 telle que. d’exécution.
le temps
T(n) cf(n)
Exemple: pour tout
Si T(n) = 3nn2>+2
n0.
alors T(n) O(n2).
Utilité: Le temps d’exécution est T (n) O( f (n))
On désire le Pour
Signification: plus toutes
de précision possible:
les grandes entrées (i.e.,
Biennn 0), on
que est assuré
T(n)
de cf(n) étapes.
= 3n 2que
+2
l’algorithme
O(n 3),ne prend pas plus
28
Grand-O: Exemples
29
Grand-O: Exemples
30
Grand-Omega W
Définition: Soit T(n), une fonction non négative. On a
T(n) W(g(n)) s’il existe deux constantes positives c
et n0 telles que T(n) cg(n) pour tout n > n0.
Borne inférieure.
31
Grand-Omega: Exemple
32
La notation Theta Q
33
La notation Theta Q
34
Analyse de la complexité :
Notation de Landau:
On ne s ’intéresse pas en général à la complexité
exacte, mais à son ordre de grandeur.
=> besoin de notations asymptotiques.
35
Analyse de la complexité : algorithme de tri
Classes de complexité
Les algorithmes usuels peuvent être classés en un certain nombre de
grandes classes de complexité :
– Les algorithmes sub-linéaires dont la complexité est en général en
O(logn).
– Les algorithmes linéaires en complexité O(n) et ceux en complexité
en O(nlogn) sont considérés comme rapides.
– Les algorithmes polynomiaux en O(nk) pour k > 3 sont considérés
comme lents, sans parler des algorithmes exponentiels (dont la
complexité est supérieure à tout polynôme en n) que l’on s’accorde à
dire impraticables dès que la taille des données est supérieure à
quelques dizaines d’unités.
36
Exemple
Q(n)
Q(n2)
Q(n3)
Q(2n)
Q(lg n)
38
Erreurs fréquentes
Si
f(n) = O(g(n))
et
g(n) = O(h(n)),
alors
f(n) = O(h(n)).
Si
f(n) = O(kg(n))
où k > 0, une constante
alors
f(n) = O(g(n)).
Si
f1(n) = O(g1(n))
et
f2(n) = O(g2(n))
alors
f1(n)f2(n) = O(g1(n) g2(n))
Règles pour calculer la complexité d’un algorithme
48
Exemples
Exemple 1: a = b;
Temps constant: Q(1).
Exemple 2:
somme = 0;
for (i=1; i<=n; i++)
somme += n;
Temps: Q(n)
49
Exemples
Exemple 3:
somme = 0;
for (j=1; j<=n; j++)
for (i=1; i<=n; i++)
somme++;
for (k=0; k<n; k++)
A[k] = k;
50
Exemples
Exemple 4:
somme = 0;
for (i=1; i<=n; i++)
for (j=1; j<=i; j++)
somme++;
51
Exemples
Exemple 5:
somme = 0;
for (k=1; k<=n; k*=2)
for (j=1; j<=n; j++)
somme++;
52
Efficacité des algorithmes
Définition: Un algorithme est dit efficace si sa
complexité (temporelle) asymptotique est dans O(P(n))
où P(n) est un polynôme et n la taille des données du
problème considéré.
A1 log n T1 Z1 = T1100
A2 n T2 Z2 =100 T2
A3 n log n T3 Z3 = 100 T3
A4 n2 T4 Z4 = 10 T4
A5 2n T5 Z5 = T5 +log 100
56
Par conséquent, on obtient ce qui suit:
T6 Z6
T6 Z6
100
e e
57
Comparaison de fonctions
58
1. Si L = constante 0, alors f et g sont de
même ordre, c’est-à-dire que f(n) =
O(g(n)) et g(n) = O(f(n)) ou tout
simplement O(f(n)) = O(g(n)).
2. Si L = 0 alors f est de l’ordre de g, c’est-à-
dire f(n) = O(g(n)).
3. Si L = alors g est de l’ordre de f,
c’est-à-dire g(n) = O(f(n)).
59
Remarque: dans plusieurs cas, pour faciliter
les calculs, la règle suivante de l’Hôpital est
souvent utilisée. Cette règle est pratique car,
en général, la dérivée d’une fonction est facile
à évaluer que la fonction elle-même:
f ( n) f ' ( n)
lim lim '
n g ( n ) n g ( n )
60