cours 4

publicité
Complexité
ou
Comment mesurer l'efficacité d'un algorithme
Laurent Tichit - Licence GTSBD
1
Efficacité ?
●
En temps ou en mémoire (stockage)
●
Pourquoi ?
–
Savoir si la durée (ou la place mémoire) croît
linéairement avec la taille des données en entrée.
Ex : si je double la quantité de mémoire de mon ordinateur
(ou la vitesse de traitement de son processeur) cela me
permettra t-il de traiter des problèmes 2x plus gros ?
–
Comparer à d'autres algorithmes
Laurent Tichit - Licence GTSBD
2
Temps d'exécution
●
●
Sur certaines instances de vos algorithmes,
mesurer les performances
Besoin d'implémenter les algorithmes
–
●
●
attention : très dépendant du langage choisi
Besoin de jeux de tests réalistes
Utilisation de fonctions permettant de mesurer le
temps d'exécution, la place mémoire
–
Attention : difficulté de savoir ce que ces fonctions
mesurent exactement
Laurent Tichit - Licence GTSBD
3
Comparer en pratique 2 algos
●
implémenter les deux algorithmes
●
dans le même langage
●
en utilisant le même cadre de test (le même programme
principal)
●
calculer le temps passé entre le début et la fin de l'algorithme
●
ne pas faire d'entrées-sorties
●
utiliser le même ordinateur,
●
la même disponibilité des ressources lors des exécutions
●
le même jeu de test (entrées)
●
faire plusieurs mesures, supprimer les extrêmes, moyenner.
Laurent Tichit - Licence GTSBD
4
Somme des n premiers entiers
●
V1, complexité constante
●
V2, complexité linéraire
●
Lire le code
●
Exécuter
Laurent Tichit - Licence GTSBD
5
Complexité
●
But
–
déterminer l'efficacité d'un algorithme
●
●
–
déterminer l'efficacité d'un algorithme
●
●
–
–
en temps d'exécution
et espace mémoire
dans le pire des cas
en moyenne
outil théorique
indépendant de la programmation
Laurent Tichit - Licence GTSBD
6
Complexité
●
●
Comparer des algorithmes, indépendamment
de leur implémentation : choix avant
implémentation
Déterminer comment l'algorithme évoluera en
fonction de la taille des données à traiter :
vérification de la faisabilité de l'implémentation
Laurent Tichit - Licence GTSBD
7
Classes de complexité
© Magali Contensin
Laurent Tichit - Licence GTSBD
8
Classes de complexité - 2
© Magali
Contensin
Laurent Tichit - Licence GTSBD
9
Classes de complexité - 3
●
●
Classe de complexité = ordre d'idée du temps
d'exécution en fonction de la taille des entrées
Ex : n = 1000 ; CPU : 10⁶ opérations/s
–
–
–
–
O(n) : 10-³ s
O(n²) : 1 s
O(n³) : ~15 min
2n : plusieurs siècles
Laurent Tichit - Licence GTSBD
10
Détermination de la classe de
complexité
●
●
Dans le pire des cas (cas le plus étudié, en règle
générale le plus facile à déterminer) : borne
supérieure
Comme seule la classe nous intéresse :
–
–
–
coût de chaque instruction de base (affectation,
somme, produit, etc.) = 1
coût d'un branchement conditionnel = coût de la
branche la plus coûteuse
coût d'une boucle = coût du corps x nbre itérations
Laurent Tichit - Licence GTSBD
11
Exemple
●
Minimum d'un tableau de taille n
min <- tab[0]
i <- 0
Tant que i < n répéter
si tab[i] < min
min <- tab[i]
i <- i + 1
coût: 2+
1+
n * (1
+2
+1
+2)
Complexité : 6n + 3 → O(n)
Laurent Tichit - Licence GTSBD
12
Comportement asymptotique
●
= quand n tend vers l'infini
●
Borne supérieure de la complexité
●
le « +3 » devient négligeable quand n croît
●
notation de Landau O(n)
●
La complexité de l'algorithme précédent est de
l'ordre de O(n)
Laurent Tichit - Licence GTSBD
13
Simplification de la fonction
●
Supposons une complexité
C calculée :
C = 0.001 x 2n + 20n2 + 36n + 1380
Pour un n assez grand, 0.001 nx sera
2
2 + 36n + 1380
toujours supérieur à 20n
●
●
En comparaison du premier terme, les autres
sont négligeables
n)
C est donc de l'ordre de O(2
Laurent Tichit - Licence GTSBD
14
Exemple
●
Somme desn premiers entiers :
–
version 1 :
res <- 0
1+
res <- n*(n+1)/2 1+3
Complexité : 5 → O(1)
Laurent Tichit - Licence GTSBD
15
Exemple - 2
–
version 2
res <- 0
1+
i <- 0
1+
Tant que i<=n (n+1)*
res = res+i
(2+
i <- i+1
2)
●
Complexité : 4n + 6 → O(n)
Laurent Tichit - Licence GTSBD
16
Exercice
●
●
Que calcule la fonction mystère (x est un réel, n un
entier positif)
fonction mystère (x, n) {
r <- 1 ;
pour i allant de 1 à n faire {
r <- r * x ;
}
retourner r ;
}
Calculez sa complexité (pire des cas)
Laurent Tichit - Licence GTSBD
17
Exercice
●
●
Que calcule la fonction mystère2 (x est un réel, n un entier positif)
fonction mystère2 (x, n) {
si n = 0 alors retourner 1 ;
sinon {
r <- mystère2(x, n/2) ; # division entière !!
r <- r * r ;
si n est impair alors {
r <- r * x ;
}
retourner r ;
}
}
Calculez sa complexité (pire des cas)
Laurent Tichit - Licence GTSBD
18
Complexités d'algos classiques
●
http://bigocheatsheet.com/
●
http://en.wikipedia.org/wiki/Sorting_algorithm
Laurent Tichit - Licence GTSBD
19
Téléchargement