1. Il faut déterminer quelle mesure utiliser pour calculer ces deux
quantités.
•pour le temps : le nombre d'opérations effectuées et le
temps nécessaire pour chaque opération.
•pour la place : le nombre d'instructions et le nombre des
données du programme, avec le nombre de mots mémoire
nécessaires pour stocker chacune d'entre elles, ainsi que le
nombre de mots mémoire supplémentaires pour la
manipulation des données.
Pour la complexité en temps le plus important c'est le nombre
des opérations élémentaires, la notion de complexité devient
importante quand la taille des données devient très grande.
1
2. L'exécution d'un programme nécessite l'utilisation des
ressources de l'ordinateur : temps de calcul pour exécuter les
opérations, et l'occupation de la mémoire pour contenir et
manipuler le programme et ses données.
L'objet de l'analyse de la complexité est de quantifier les deux
grandeurs physiques "temps d'exécution" et "place mémoire",
dans le but de comparer entre eux différents algorithmes qui
résolvent le même problème.
2
3. Complexité constante O(1)
Algorithme 72 : somme_suite (n : entier):
entier
Donnée : entier n
Résultat : entier
Variable locale : entier som
début
som n * (n+1) div 2
retourner som
fin
Le temps ne dépend pas de n.
3
4. Règle de calcul de complexité des
expressions
a)n3 + n2 + n3 *log2
n
n3 *log2
n domine d'où la complexité est O(n3
*log2
n)
b) n + 4n + 4n
4n domine, d'où la complexité est O(4n)
4
5. 5
Complexité linéaire O(n)
Algorithme 73 : recherche_tableau (tab: tableau, n : entier, but:
T): booléen
Donnée : but de type T
Donnée : le tableau tab d’éléments de type T
Donnée : la taille n du tableau tab
Résultat : booléen
Variable locale : booléen trouve qui indique si la valeur a été
trouvé
Variable locale : entier i, indice du tableau
début
trouve faux
i 1
TANT QUE non trouve et i<= n
SI tab[i] = but ALORS
trouve vrai
SINON
i i + 1
fin
fin
retourner trouve
Fin
Dans le pire des cas les opérations à l'intérieur de TANT QUE sont exécutées n fois.
6. 6
Complexité logarithmique O(log n)
Recherche dichotomique dans un tableau trié
Algorithme 74 : recherche_tableau_dicho (tab:
tableau, n : entier, but: T): booléen
Donnée : but de type T
Donnée : le tableau tab d’éléments de type T
Donnée : la taille n du tableau tab
Résultat : booléen
Variable locale : booléen trouve qui indique
si la valeur a été trouvé
Variable locale : déb l’indice du premier
élément du sous-tableau traité
Variable locale : fin l’indice du dernier
élément du sous-tableau traité
Variable locale : milieu l’indice du milieu
du sous-tableau traité
7. début
trouve faux
déb 1
fin n
TANT QUE non trouve et déb <= fin FAIRE
milieu (début + fin) div 2
SI but < tab[milieu] ALORS
fin milieu – 1
SINON
SI but > tab[milieu] ALORS
début milieu + 1
SINON
trouve vrai
fin
fin
fin
retourner trouve
fin 7
8. Ex. tab = (10, 12, 13, 15, 16, 19, 21, 25, 31)
but = 15
1. milieu = 5
tab[5]= 16>15
2. fin = 4
milieu = 2
tab[2] = 12 < 15
3. début = 3
milieu = 3
tab[3] = 13 <15
4. début = 4
milieu = 4
tab[4]=15
8
9. but = 24
1. milieu = 5
tab[5]= 16<24
2. début = 6
milieu = 7
tab[7] = 21<24
3. début = 8
milieu = 8
tab[8] = 25 >24
4. fin = 7 fin < début
9
10. Complexité polynomiale
quadratique O(n2)
Tri à bulles
Algorithme 75 : tri_a_bulles (tab: tableau,
n : entier): booléen
Donnée : taille du tableau n
Donnée modifiée : tableau tab d’éléments de
type T
Variable locale : booléen ech qui indique si
un échange a eu lieu
Variable locale : i indice dans le tableu
Variable locale : k compteur des parcours
Variable locale : tmp de type T permettant
de faire un échange
10
11. début
ech vrai
k -1
TANT QUE k < n et ech FAIRE
k k + 1
ech faux
POUR i = 1 à n – k – 1 FAIRE
SI tab[i] < tab[i + 1]
temp tab[i]
tab[i] tab[i+1]
tab[i+1] temp
ech vrai
fin
fin
fin
11