Académique Documents
Professionnel Documents
Culture Documents
Durée : 2h
Capacités attendues
Montrer la terminaison de la recherche dichotomique à l’aide d’un variant de
1
boucle
I – PRÉSENTATION DE L’ALGORITHME..................................................................................................................................... 2
1.1 – APPROCHE NAÏVE....................................................................................................................................................................2
1.2 – APPROCHE PAR DICHOTOMIE.....................................................................................................................................................2
II – COÛT EN TEMPS.............................................................................................................................................................. 3
2.1 – ETUDE DE LA RECHERCHE SÉQUENTIELLE (NAÏVE)...........................................................................................................................4
2.2 – ETUDE DE LA RECHERCHE PAR DICHOTOMIE..................................................................................................................................4
III – TERMINAISON DU PROGRAMME.................................................................................................................................... 5
Algorithmique
Durée : 2h
I – Présentation de l’algorithme.
De nos jours, des volumes importants de données sont susceptibles d’être traités par les ordinateurs. Des
algorithmes efficaces sont alors nécessaires pour réaliser ces opérations comme, par exemple, la sélection et la
récupération des données.
Leur rôle est de déterminer si une donnée est présente et, le cas échéant, d’en indiquer sa position, pour
effectuer des traitements annexes. La recherche d’information dans un annuaire illustre cette idée.
Cet algorithme renvoie un entier positif ou nul en cas de succès, qui correspond à la position de la valeur
recherchée dans le tableau, et -1 en cas d’échec.
Exemple : Déterminer la valeur affichée dans la console lors de l’exécution du programme ci-dessous :
Voici un pseudo-code qui recherche par dichotomie un entier v dans une liste triée liste comportant n
éléments.
gauche 0
droite n-1
TantQue gauche <= droite
milieu = int((gauche+droite)/2)
Si v = liste[milieu] Alors
Renvoyer milieu
Sinon Si liste[milieu] > v Alors
droite milieu - 1
Sinon
gauche milieu + 1
Fin Si
Fin TantQue
Renvoyer -1
Liste
1 3 5 6 8 11 13 14 14 17 19 21 23
Valeur renvoyée =
II – Coût en temps.
Supposons que l’on doive effectuer une recherche dans un tableau trié contenant beaucoup de valeurs. Il
est évident que l’exécution de cette recherche prendra un certain temps. On appelle cela le coût en temps de
l’algorithme.
Le calcul du coût peut aider au choix d’un algorithme.
Définition : Le coût en temps d’un algorithme est l’ordre de grandeur du nombre d’opérations arithmétiques ou
logiques que doit effectuer un algorithme pour résoudre le problème auquel il est destiné.
Cet ordre de grandeur dépend évidemment de la taille N des données en entrées.
Coût constant s’il ne dépend pas de N ;
Coût logarithmique s’il est d’ordre log(N) ;
Coût linéaire s’il est d’ordre N ;
Coût quadratique s’il est d’ordre N2 ;
Coût exponentiel si l’ordre est de la forme d’une puissance ou N apparait en exposant.
Algorithmique
Durée : 2h
La ligne 3 est effectuée plusieurs fois. Cela dépend du nombre d’éléments du tableau. On doit toujours ce
placer dans le plus mauvais des cas. L’instruction sera effectuée n-1 fois, si n est le nombre d’éléments du tableau.
Si n=10, alors on pourra avoir la ligne 3 répétée 10 fois. Si n=100, la ligne 3 pourra être répétée 100 fois.
On remarque ici que le nombre de répétitions est proportionnel au nombre n d’éléments.
Cela pourra s’avérer pénalisant pour des tableaux comportant beaucoup d’éléments.
174
Si l’on arrive à trouver une telle quantité, il est évident que l’on va nécessairement sortir de la boucle au
bout d’un nombre fini d’itérations puisqu’ un entier positif ne peut décroître infiniment.
Preuve de la terminaison :
Dans notre cas, la condition sur la boucle while est : TantQue gauche <= droite.
On peut aussi écrire pour faire apparaitre un variant de boucle : TantQue droite – gauche >= 0.
Montrons maintenant que le variant décroit strictement lors de l’exécution du corps de la boucle.
Le variant ayant strictement décru, nous avons prouvé que notre boucle se termine bien.