Programmation
avancéé
KHOUFACHE née Bachiri Lina, bachiri.lina@gmail.com
Département d’informatique
Master 1
1.3 Calculer
1.3.1 Méthode naïve
Debut
Si ( n=0 ) alors
retourner(1) ;
Sinon
y x;
y x;
retourner(y) ;
Fin si ;
Fin.
1. Méthode binaire
2. Remplacer chaque :
– « 0 » par la lettre « S ».
2. 1 1 1 1
sx sx sx sx
4. Nous partons de x et nous obtenons successivement : x2, x3, x6, x7, x14, x15
Nous sommes donc capables de calculer x15 en 6 multiplications au lieu de 14. Le nombre de
multiplications dans cette méthode est ⌊ ⌋ avec b(n) est le
nombre de « 1 » dans l’écriture binaire de n.
Pour n=15
⌊ ⌋
2
2. 1 0 1 1 1
sx s sx sx sx
4. Nous partons de x et nous obtenons successivement : x2, x4, x5, x10, x11, x22, x23
Pour n=23
⌊ ⌋
Cette méthode consiste à utiliser une factorisation de n : n = p*q où p est le plus petit
diviseur premier de n et q > 1. On calcule d’abord qu’on élève ensuite à la puissance q.
Illustration avec
3
CHAPITRE 2
Complexité et optimalité
2.1 Introduction
Pour que le résultat de l’analyse de la complexité d’un algorithme soit pertinent, il faut
avoir un modèle de machine sur laquelle l’algorithme sera implémenté (sous forme de
programme). On prendra comme référence un modèle de machine à accès aléatoire (RAM)
et à processeur unique, où les instructions sont exécutées l’une après l’autre, sans opérations
simultanées.
Exemples :
- Si le tri du tableau a une complexité 𝑓(n) = + , on dira que le tri possède une complexité
linéaire.
4
- Si un autre algorithme de tri possède une complexité 𝑓(n) = 2, alors on considèrera que ce
tri a une complexité quadratique.
Le plus souvent, on utilise la complexité au pire, car on veut borner le temps d'exécution.
Exemple soient 𝑓
Nous avons 𝑓
En effet 𝑓
5
2.8 Ordre de grandeur
Pour comparer des algorithmes, il n’est pas nécessaire d’utiliser la fonction de
complexité T, mais seulement l’ordre de grandeur asymptotique, noté O (« grand O »). Une
fonction T(n) est en O(f(n)) (« en grand O de f(n) » ) si :
Ǝ ,Ǝc , T(n) c* f(n).
Autrement dit :
T(n) est en O(f(n)) s’il existe un seuil n0 à partir duquel la fonction T est toujours dominée
par la fonction f, à une constante multiplicative fixée c près.
Exemples :
6
constante si complexité(A) = O(1)
logarithmique si complexité(A)=O(log(n))
linéaire si complexité(A) = O(n)
quadratique si complexité(A) = O( )
polynomiale si complexité(A) = O( ) pour k 3
exponentielle si complexité(A) =O(en)
Nous notons
ci: le coût en temps d'exécution d'une instruction i
t j: nombre d’exécutions de la boucle tant que pour la valeur j
n-1
A[i+1] x; c7
Finpour
Fin
7
Complexité
= (c1+c2+c3+c7)*n- (c2+c3+c4+c7)
+ + + c7 *
T(n)= ( +( )n-
(c2+c3+c4+c7)