Ordre de grandeurs et notation theta
ATTENTION: La mise en page de ce billet pose problème, veuillez vous référer aux liens donnés dans le billet précédent pour consulter l'article sous une meilleure forme.
Julien BIBOLLET, Dimitri BISOO, Benjamin GANDON
Résumé: Lorsque l'on doit choisir parmis plusieurs algorithmes celui qui est le plus performant, on a besoin d'exprimer une approximation de sa complexité ou de son temps d'exécution. Pour ce faire, on utilise la notation
Table des matières
Ordre de grandeurs En général, un algorithme possède un paramètre
Ordres de grandeurs courants
La majorité des instructions n'est exécutée qu'une seule fois, ou un petit nombre de fois; le temps d'exécution du programme est donc considéré constant.
Un temps d'exécution logarithmique signifie que l'algorithme va aller très légèrement plus lentement à mesure que
1000$" width="72" height="14" align="bottom" />,
3$" width="81" height="32" align="middle" /> si la base est Le temps d'exécution est linéaire lorsque quelques opérations sont appliquées à chaque élément en entrée. Le temps d'exécution double chaque fois que
Cette classe est typique des programmes algorithmes qui résolvent un problème en le découpant en de plus petits, en les traitant indépendamment puis en combinant ensuite les solutions. Quand
Un temps d'exécution quadratique est surtout adapté à la résolution de petits problèmes et traite tous les couples d'éléments (d'où le
N \times N$" width="96" height="34" align="middle" />). Dans un tel cas, quand Similairement au précédent, un temps d'exécution polynomiale ou géométrique va traiter tous les
Un algorithme en temps d'exécution exponentiel est quasiment inutilisable dans la pratique: quand
Un algorithme en temps d'exécution factoriel n'est même pas envisageable, tant le temps d'exécution va grandir pour chaque unité de
. Dans la pratique, le temps d'exécution d'un algorithme n'est pas rigoureusement exact à l'une des fonctions précédentes, mais plutôt à une constante multiplée par l'une de ces fonctions plus quelques petits termes. Les valeurs de cette constante et de ces termes supplémentaires dépendent des détails de l'implémentation et nécessitent une analyse plus précise de l'algorithme pour être déterminés. Pour faire simple, la constante est très liée au nombre d'instructions dans la boucle interne de l'algorithme. Toutefois, dans la plupart des cas, on dit simplement d'un algorithme que son temps d'exécution est logarithmique, linéaire, quadratique, ...via l'utilisation de la notation
Tableaux comparatifs
Tableau: Résultats de quelques fonctions utilisées dans l'analyse des algorithmes.
En étudiant le tableau 1, on peut, par exemple, se rendre compte de la grande différence qu'il existe entre
Tableau: Temps de résolution en fonction de la complexité. Opérations Taille du problème de 1 million Taille du problème de 1 milliard par seconde
Le tableau 2 montre le temps moyen de résolution d'un problème avec 1 million et 1 milliard d'éléments, en fonction de sa complexité et de la capacité de calcul de la machine. Ce tableau permet de se rendre compte qu'un algorithme rapide sera à même de résoudre un gros problème, même sur une machine lente, mais que l'inverse n'est pas vrai: une machine, même très performante, ne sera pas en mesure de résoudre un problème avec un algorithme en
Notation
Définitions mathématique Avant de définir la notation
Notation
O(g(x))$" width="111" height="32" align="middle" /> quand
\forall x > N_0 \mid f(x) \mid \leq C_0 \mid g(x) \mid$" width="340" height="32" align="middle" /> (autrement dit, on est simplement en train de définir le fait que Notation
et
avec
\mid f(x) \mid \geq M \mid g(x) \mid \forall x > x_0$" width="428" height="32" align="middle" />.
Utilisation On peut voir la notation
Cette notation permet d'écrire, en toute rigueur mathématique, le comportement d'une fonction, ou, dans notre cas, la complexité approximée d'un algorithme. En effet, si l'on prend l'exemple d'un algorithme de complexité
3 \times N^2 + 2 \times N - 3$" width="202" height="34" align="middle" />, on l'associe à la classe
. La notation
permet donc de s'affranchir des constantes (ce qui est fondé puisque l'on peut dire qu'elles dépendent de l'implémentation de l'algorithme) et des termes plus faibles (puisqu'ils sont 'dominés'). Les constantes
et
de la définition de la notation
servent à masquer les détails d'implémentation.
Ainsi, en écrivant
3 \times N^2 + 2 \times N - 3 = \theta(N^2)$" width="265" height="34" align="middle" />, on reste rigoureux au niveau mathématique (la notation
se chargeant de contenir les termes négligeables afin d'obtenir une égalité), et cela donne une approximation de la complexité de l'algorithme permettant de rapidement comparer différents algorithmes entre eux pour déterminer le plus performant.
. Pour résumer, on peut dire que la notation
- borner les erreurs faites lorsque l'on ignore les petits termes dans les formules mathématiques
- borner les erreurs faites lorsque l'on ignore des morceaux de l'algorithme qui influencent très peu le temps total dans le cadre de l'analyse en cours
- classer les algorithmes selon les bornes supérieures de leur temps total d'exécution
Exemple d'application: QuickSort Nous allons expliquer comment calculer la complexité d'un algorithme à travers un exemple: l'algorithme de QuickSort.
Principe de QuickSort: Le principe consiste à séparer l'ensemble des éléments en deux parties. Pour effectuer la séparation, une valeur pivot est choisie. Ensuite les deux ensembles sont séparés par rapport à la valeur du pivot : ceux qui sont plus petits vont à gauche et ceux qui sont plus grand vont à droite, le pivot étant intercalé entre les deux.
Problème: Le problème de cet algorithme est la recherche du pivot. En effet, l'idéal consiste à prendre un pivot permettant de séparer les deux ensembles en deux parties de taille sensiblement égales. Dans la pratique, le pivot est le premier élément ou le dernier élément de l'ensemble à fractionner. En moyenne, les deux ensembles seront de taille sensiblement égale.
Complexité: La complexité du tri rapide pour trier une liste de
Bibliographie
1 Robert Sedgewick.
Algorithmes en C++.
Pearson Education, troisième edition, 2004.
2 wikipedia.
http://fr.wikipedia.org/wiki/Notation_O.
À propos de ce document... Complexité structurelle: ordre de grandeur et notation
This document was generated using the LaTeX2HTML translator Version 2002-2-1 (1.71)
Copyright © 1993, 1994, 1995, 1996,
Nikos Drakos,
Computer Based Learning Unit, University of Leeds.
Copyright © 1997, 1998, 1999,
Ross Moore,
Mathematics Department, Macquarie University, Sydney.
The command line arguments were:
latex2html complexite_structurelle.tex -dir website -split 0
The translation was initiated by on 2007-05-17
- jbibollet
- 18:25
- > Lien permanent
- > Commentaires
- > Abus ?




