4.1. MESURE DE LA COMPLEXITÉ (EN TEMPS)
3
Le temps d’exécution d’un algorithme donné dépend principalement de
• la machine utilisée : langage, système d’exploitation, compilateur, vitesse de calcul de la
machine, etc.
• les données auxquelles l’algorithme est appliqué.
Nous allons utiliser une mesure plus abstraite, qui ne dépend pas de la machine ni des données
elles-mêmes, mais plutôt de la taille des données (taille de « l’input »). Par exemple, le temps d’exé-
cution d’un algorithme de tri dépend de la longueur de la liste à trier. Le temps d’éxécution d’une
multiplication de deux nombres dépend du nombre de chiffres de ces nombres. Nous utiliserons
donc une fonction pour décrire la complexité d’un algorithme (voir figure 4.1).
fonction complexité
taille des données
temps ou
nombre d’opérations
FIG. 4.1 On utilise une fonction pour décrire la complexité d’un algorithme.
Exercice 4.1 Considérez l’algorithme de fouille séquentielle (« Linear Search ») et l’algorithme de
fouille dichotomique ( »Binary Search ») (voir les algorithmes 2 et 3, section 3.1, page 195, ou encore la
figure 4.2 qui présente leur implémentation sur Nspire). Nous choisissons ici d’étudier la complexité
dans le pire des cas (worst case complexity).
(a) Pour chacun des algorithmes, déterminez le nombre de comparaisons requises pour traiter
une liste de taille n.
(b) Lequel des deux algorithmes sera plus efficace pour traiter de grandes listes de données
préalablement ordonnées en ordre croissant ?
Exercice 4.2 Si l’algorithme A nécessite f(n) opérations d’un certain type pour résoudre un pro-
blème de taille net l’algorithme Ben nécessite g(n), déterminez lequel sera plus efficace pour
résoudre les gros problèmes lorsque
(a) f(n)=n3+3 et g(n)=25+n2.
(b) f(n)=2n+4n3et g(n)=10n4.
Pour répondre à cette question, vous avez peut-être tracé un graphe, observé un tableau, ou peut-
être avez-vous simplement utilisé vos connaissances antérieures sur les fonctions pour répondre
immédiatement à la question. Nous allons maintenant nous doter d’outils servant à comparer
rapidement deux fonctions et ainsi à identifier les algorithmes les plus efficaces.
Geneviève Savard, ÉTS, 2014