Algorithmes et Structures de Données Chapitre 6 . Complexité

publicité
Résumé
Structures de données de bases
La représentation des données
Algorithmes et
Structures de Données
Chapitre 6 – Complexité
Les fonctions et les procédures
La récursivité
Les variables dynamiques, les pointeurs
Les listes
Les piles et les files
Définition
Capocchi Laurent
[email protected]
http://spe.univ-corse.fr/capocchiweb
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Objectifs
Implémentation
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Rappels
Définition d’un algorithme
La complexité
Définition
Utilisation
Notation asymptotiques
Un algorithme est une séquence d’étapes de calcul qui
transforme l’entrée en sortie
Exemple : problème du tri
Entrée : suite de N nombres
Sortie : permutations de la suite donnée en entrée
Algorithme correct : pour chaque instance en entrée, il
se termine en produisant la bonne sortie
Un algorithme correct résout le problème donné
Algorithme incorrect : risque de ne pas se terminer pour
certaines instances en entrée, voir de se terminer sur
une réponse autre que celle désirée
Un algorithme incorrect peut être utile si son taux
d’erreur est contrôlé
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Rappels
Définition d’une structure de données
Moyen de stocker et organiser des données pour faciliter
l’accès à ces données
leur modification
Aucune structure de données répond à tous les besoins
Important de connaître les forces et les limitations de
plusieurs de ces structures
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Efficacité d'un algorithme
Comment analyser un algorithme ?
Prévoir les ressources nécessaires à cet algorithme :
temps de calcul
En analysant plusieurs algorithmes résolvant le problème
on arrive à identifier le plus efficace
Pour analyser un algorithme il faut avoir un modèle
de technologie : une architecture
Modèle de Von Neuman : Modèle RAM
Un seul processeur
Une mémoire centrale : RAM
Une exécution séquentielle des instructions
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Efficacité d'un algorithme
Pourquoi évaluer l’efficacité d’un algorithme ?
Le ordinateurs ne sont pas infiniment rapides
La mémoire n’est pas gratuite
Utiliser des algorithmes performants en terme
de durée : temps d’exécution
d’encombrement : mémoire
Évaluer l’efficacité d’un algorithme = Analyser
l’algorithme
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Efficacité d'un algorithme
Si on veut être strict, il faut définir précisément les
instructions du modèle RAM et leur coût
C’est possible mais ça n’apporterait pas grand chose en
matière de conception et d’analyse d’algorithme
Le modèle RAM contient les instructions suivantes
Instructions arithmétiques : + - * / % ..
Instructions de transfert de données : lecture, stockage,
copie ..
Instructions de contrôle
Chacune des instructions possède un temps d’exécution
constant
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Efficacité d'un algorithme
Analyser un algorithme = prévoir les ressources en
temps
On peut évaluer ce temps d’exécution en comptant le
nombre d’opérations élémentaires requises pour
l’exécution de l’algorithme analysé
Analyser un algorithme, même simple peut s’avérer
très complexes !
Efficacité d'un algorithme
Conclusion
Le comportement d’un algorithme peut varier pour
chaque entrée possible
il faut trouver un moyen de résumer ce comportement
en quelques formules simples et faciles à comprendre
il faut être capable de récupérer les termes les plus
significatifs dans une formules
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Efficacité d'un algorithme
Exemple
Problème du calcul de la somme de N premiers entiers
présenter sous la forme d’une fonction appelée somme(n:
Entier)
La durée d’exécution de l’algorithme de la fonction
somme(n: Entier) dépend de l’entrée
La somme des 1000 premiers entiers prend plus de
temps que la somme des 3 premiers entiers
En général, le temps d’exécution d’un algorithme croit
avec la taille de l’entrée
Le temps d’exécution est exprimé en fonction de la taille
de son entrée
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Efficacité d'un algorithme
Définitions
Taille de l’entrée
Nombre d’éléments constituant l’entrée
Temps d’exécution
Le T(n) d’un l’algorithme pour une entrée particulière est
le nombre d’opérations élémentaires ou étapes
exécutées
Conventions
Chaque ligne de pseudo-code demande un temps
constant
Deux lignes différentes peuvent prendre des temps
différents mais chaque exécution de la i-ème ligne prend
un temps Ci où Ci est une constante
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Efficacité d'un algorithme
Fonction Somme (n : Entier):Entier
var locale temp, nb : Entier
temp <- 0
nb <- 1
tant que (nb<=n) faire
temp <- temp +nb
nb <- nb + 1
finTantQue
retourner temp
Fin fonction somme
Efficacité d'un algorithme
Coût
Nb de fois
C1
1
C2
1
C3
n+1
C4
n
C5
n
T(n) = C1+C2+C3+(C3+C4+C5)*n
T(n) = a*n+b
C’est une fonction linéaire
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Conclusion
Le T(n) d’un algorithme = ordre de grandeur donnant une
caractérisation simple de l’efficacité d’un algorithme
Permet également de comparer les performances
d’algorithmes servant à faire le même travail
Il est possible de déterminer le T(n) exact d’ un algorithme
Précision généralement non nécessaire
Pour des entrée grandes, les constantes sont
négligeables
a*n3 +b*n2 +c*n + d ≤ e*n3
Étude asymptotique des algorithmes
Étude de la façon dont augmente T(n) quand n ->
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Fonction somme (n : Entier): Entier
var locale accu : Entier
accu <- n*(n+1)/2
Coût
retourner accu
FinFonction somme
C1
Nb de fois
1
T(n) = C1
Le temps d’exécution est constante
Conclusion : à partir d’un « n » assez grand
on peut dire que l’algorithme 2 est plus
efficace que l’algorithme 1
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Notations asymptotiques
En général, un algorithme plus efficace asymptotiquement
qu’un autre constitue le meilleur choix
Sauf pour les entrées trop petites
Notations asymptotiques
Notation grand teta : Θ
Si T(n) = a*n+b alors T(n) = Θ (n)
Sens de la notation
Θ(g(n)) = {f(n) tq des constantes > 0 : c1,c2 et n0 tq :
0≤c1*g(n)≤f(n)≤c2*g(n), ∀n ≥ n0}
La notation Θ borne une fonction entre deux facteurs
constants
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Notations asymptotiques
Notation grand o : O
Sens de la notation
O(g(n)) = {f(n) tq
des constantes > 0 : c et n0 tq :
0≤f(n)≤c*g(n), ∀n ≥ n0}
La notation O sert à majorer une fonction à un facteur
constant près
Notation grand oméga :
Sens de la notation
(g(n)) = {f(n) tq des constantes > 0 : c et n0 tq :
0≤c*g(n) ≤f(n), ∀n ≥ n0}
La notation sert à minorer une fonction à un facteur
constant près
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Quelques situations typiques
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Conclusion
Notation asymptotiques
Quand on dit « le T(n) est en O(n²) », on signifie qu’il
existe une fonction f(n) qui est O(n²) et tq pour ‘n’ fixé, qq
soit l’entrée de taille n ,le T(n) est borné supérieurement
par f(n)
le T(n) le plus défavorable est O(n²)
Quand on dit « le T(n) est en (n²) », on signifie que
pour ‘n’ suffisamment grand, qq soit l’entrée de taille ‘n’
choisie pour une valeur qcq de ‘n’, le T(n) pour cette
entrée est au moins un multiple constant de n²
Les complexités sont fréquemment utilisées en
Informatique
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Courbes de croissance des complexités
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Représentation graphiques
Résumé
Évaluer l’efficacité des algorithmes = Évaluer son temps
d’exécution
Possibilité d’évaluation exacte
T(n) = c1 + c2*n + c3*n5 + c4*n + c5
Ignorer le coût réel de chaque instruction en utilisant
les constantes ‘ci’ pour représenter le coût de chaque
ligne
Les constantes ‘ci’ donnent plus de détails que
nécessaire
T(n) = a*n5 + b*n + c ou a,b,c dépendent des ‘ci’
Ignorer les coûts abstraits ‘ci’
Utilisation d’une simplification supplémentaire
Partie intéressante de T(n) = taux de croissance ou
ordre de grandeur
T(n) = a*n5
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Résumé
Bibliographie et Webographie
Les termes d’ordres inférieurs sont moins significatifs pour
‘n’ grand
Ignorer le coefficient constant du terme dominant
C. PAOLI, Cours d'algorithmes et structures de données,
Université de Corse, 2005
L’algorithme, dans le cas le plus défavorable à un T(n) =
O(n5)
Notations asymptotiques
Notation grand téta : Θ(g(n))
Notation grand o : O(g(n))
Notation grand oméga : (g(n)
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Université de Corse - IUP NTIC2 2005/2006 – Algorithmes et Structures de Données
Téléchargement