fin - Adrien Poupa

publicité
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.
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.
2
Règle de calcul de complexité des
expressions
a)n3 + n2 + n3 *log2n
n3 *log2n domine d'où la complexité est O(n3
*log2n)
b) n + 4n + 4n
4n domine, d'où la complexité est O(4n)
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.
4
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
5
Dans le pire des cas les opérations à l'intérieur de TANT QUE sont exécutées n fois.
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 :
Donnée :
Donnée :
Résultat
but de type T
le tableau tab d’éléments de type T
la taille n du tableau tab
: 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é
6
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
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
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
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
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
Téléchargement