45 lines
1.6 KiB
Markdown
45 lines
1.6 KiB
Markdown
> Après avoir vu le parcours séquentiel d'un tableau dans le but de trouver un élèment, on va pouvoir voir une méthode bien plus efficace dans le cas d'une liste triée, **la recherche dichotomique.**
|
|
|
|
### Le programme
|
|
|
|

|
|
|
|
-----------
|
|
|
|
### Etymologie
|
|
|
|
Le mot dichotomie vient du grec ancien
|
|
$$
|
|
dikhotomia
|
|
$$
|
|
qui signifie ***couper en deux***
|
|
|
|
-------------
|
|
|
|
### Problème de base
|
|
|
|
Supposons un tableau tab :
|
|
|
|
```python
|
|
tab = [1,2,6,9,12,14,18,21,42]
|
|
```
|
|
|
|
Si on souhaite chercher un élèment, par exemple 7, en utilisant le [parcours séquentiel](PARCOURS.md) on fonctionne par balayage (avec une boucle for...) et donc parcourir la liste du début à la fin en colparant chaque valeur à l'élèment recherché.
|
|
|
|
Ici par exemple, on effectuerait 9 comparaison pour finir par dire que non, 7 n'est pas présent.
|
|
|
|
Dans le cas d'une liste **déjà triée**, la recherche dichotomique permet d'améliorer les performances.
|
|
|
|
-----------
|
|
|
|
### Principe
|
|
|
|
- Si le tableau est vide, on renvoie False, la recherche est terminée.
|
|
- Sinon, on trouve la valeur la plus *centrale* du tableau et on la compare avec l'élément recherché :
|
|
- si la valeur est celle qu'on recherche, on renvoie True, la recherche est terminée.
|
|
- si la valeur est plus petite que l'élèment recherché, on recommence la procédure avec la seconde moitié du tableau.
|
|
- si la valeur est plus grande que l'élément recherché, on recommence avec la première moitié du tableau.
|
|
|
|

|
|
|
|
Par Tushe2000 — Template:LoStrangolatore, Domaine public, https://commons.wikimedia.org/w/index.php?curid=39675138 |