exemple. Pouvons-nous utiliser le même ordinateur et le même programme dans le cas d’une liste
de cinq cents mille éléments (population de la ville de Toulouse, par exemple) ? Combien de temps
faudra-t-il alors pour trouver un élément dans cette liste ?
Avec notre premier algorithme (coût linéaire), le temps d’exécution est proportionnel à la taille
de la liste (du tableau). Il faut donc mille fois plus de temps, soit cent secondes : ce n’est pas viable.
Cette dégradation peut-elle être compensée par les progrès de la technologie ? Quand ces progrès
nous permettront-ils de travailler sur une telle grosse liste mais avec le temps de réponse actuel ?
Nous interpréterons la loi de Moore comme nous disant que les machines vont deux fois plus vite
tous les dix-huit mois, donc 210 =1024 fois plus vite au bout de 180 mois. Il nous faudra donc
attendre quinze ans pour pouvoir utiliser notre algorithme à coût linéaire à l’échelle de Toulouse
avec le même temps de réponse qu’auparavant.
Avec notre second algorithme (coût logarithmique), le temps d’exécution est de la forme
Clog2n, avec une constante Ctelle que Clog2500 =1/10 (secondes). A l’échelle de Toulouse,
cela donne un temps d’exécution de :
Clog2500000 =1/10 ×(log2500000/log2500)1/10 ×2,2 secondes.
Le temps d’exécution n’est pas outrageusement plus long, et il nous faudra seulement attendre un
peu plus de dix-huit mois pour pouvoir utiliser notre algorithme à coût logarithmique à l’échelle
de Toulouse avec le même temps de réponse qu’auparavant :
Les bons algorithmes profitent mieux de l’amélioration du matériel.
Reste que notre bon algorithme suppose le tableau trié. Le tri d’un tableau est lui-même une
opération couteuse ! Pratiquement, il n’est pas question de trier un tableau dans lequel on n’ef-
fectuera qu’une ou deux recherches ; mais, si les recherches doivent être fréquentes (dictionnaire,
base de donnéees . . .), autant trier le tableau (ou la liste, ou le fichier selon le cas) 1.
Exercice 4.1.3 On supose que le tableau est non trié et contient des entiers compris entre 1 et m.
Il y a donc mnpossibilités de tels tableaux, que l’on considèrera comme équiprobables. Combien
de comparaisons sont en moyenne nécessaires pour trouver un élément e∈ {1,... ,m}?
TP 4.1.4 Programmer l’algorithme de recherche dichotomique.
4.1.2 Recherche du maximum dans un tableau
On suppose encore que le type des éléments du tableau est muni d’une relation d’ordre, et l’on
se propose de rechercher la position du plus grand des éléments T[1],...,T[n]. Bien entendu, si le
tableau est trié, ce maximum est T[n]et le problème est trivial. En général, voici un algorithme
simple :
1. On admet implicitement ici que le tableau est constitué et trié une fois pour toutes, ce qui est bien le cas pour un
dictionnaire, mais rarement pour une base de données. Pour un ensemble de données qui évolue, d’autres structures de
données conviennent.
39