Recherche dichotomique

Fermé
Adnane91 Messages postés 35 Date d'inscription mardi 29 septembre 2009 Statut Membre Dernière intervention 4 juillet 2010 - 15 janv. 2010 à 20:24
Adnane91 Messages postés 35 Date d'inscription mardi 29 septembre 2009 Statut Membre Dernière intervention 4 juillet 2010 - 16 janv. 2010 à 21:40
Bonsoir:

je veux qlq m'expliquer facilement le principe de RECHERCHE DICHOTOMIQUE svp

et MERCI

5 réponses

crapoulou Messages postés 28160 Date d'inscription mercredi 28 novembre 2007 Statut Modérateur, Contributeur sécurité Dernière intervention 21 mai 2024 7 998
15 janv. 2010 à 20:30
Bonsoir,

Essaye de regarder ici, cela peut t'aider (si ce n'est pas déjà fait) :
https://fr.wikipedia.org/wiki/Dichotomie
http://www.siteduzero.com/tutoriel-3-32948-recherche-dichotomique.html

Le but est de rechercher ta valeur dans un vecteur trié.
Tu procèdes par moitié :
Tu coupes ton vecteur en 2 et tu regarder si c'est inférieur ou supérieur à la valeur que tu recherches.
En fonction de cela, tu cibles ta recherche dans ton vecteur.
(variables inf : borne inférieure de recherche et sup : borne supérieure de recherche).

A la fin, tu regardes si sup = val (valeur cherchée).

Je t'ai expliqué grossièrement mais avec les liens et ça tu devrais y voir plus clair.
Qu'est-ce que tu n'as pas compris plus précisément ?
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
15 janv. 2010 à 20:39
en fait, on fait naturellement un truc dans le même genre lorsque on recherche un nom dans un annuaire par exemple :
xxxxxxxxxx

On cherche John

On ouvre l'annuaire au milieu. On tombe sur Martin. Donc on est trop loin.
On prend alors le milieu de la première moitié.

Imagine on tombe sur Jean-louis.

On est pas assez loin, il faut rechercher dans le quart après jean-louis.
Etc... jusqu'à ce qu'on tombe pile sur John.
0
Adnane91 Messages postés 35 Date d'inscription mardi 29 septembre 2009 Statut Membre Dernière intervention 4 juillet 2010
15 janv. 2010 à 21:21
Trés bien :

donc si je comprends bien le principe de la recherche dichotomique

1-c'est de chercher une valeur sur la liste de N valeur
2-l'avantage de la rechcerche dochotomique consiste de eviter l'ancien methode de recherche ( d'une facon linéaire ) .. mais couper la liste (sur2) et comparer la valeur rechercher avec L( I ) de milieu
Si Val = L( I ) ===> ( Mission succes )
Si Val > L( I ) ===> ( completer la rechcerche sur la moitié L( I )SUP )
Sinon ===> (completer la recherche sur la moitié L( I )INF )

la question Mnt : pour completer la recherche soit sur la moitié sup ou inf est ce qu'on va repeter le meme principe c'est a dire diviser(2) la moitié(SUP) - (si on cherche par exemple dans la moitié SUP) et verifier si L(I-moitié) sup ou inf ..... et ainsi de suite ....OU il y'a une autre methode ?!!
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
15 janv. 2010 à 21:42
la question Mnt : pour completer la recherche soit sur la moitié sup ou inf est ce qu'on va repeter le meme principe c'est a dire diviser(2) la moitié(SUP) - (si on cherche par exemple dans la moitié SUP) et verifier si L(I-moitié) sup ou inf ..... et ainsi de suite ....OU il y'a une autre methode ?!!

Oui c'est bien ça : selon si Val > L( I ) ou Val < L( I ), on réapplique le même procédé sur le tableau supérieur ou inférieur respectivement. Donc on refait une recherche dichotomique, mais pas sur le même tableau : un tableau environ deux fois plus petit

C'est donc un procédé récursif, ce qui a le mérite d'être "élégant" (facile à coder et à comprendre en général)


En comparaison à la recherche linéaire qui est O(N) en complexité, la recherche dichotomique est O(log2(N)).
C'est donc très efficace.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Adnane91 Messages postés 35 Date d'inscription mardi 29 septembre 2009 Statut Membre Dernière intervention 4 juillet 2010
16 janv. 2010 à 21:40
Merci Pacorabanix,
Donc l'algorithme est comme ca

1-donner le nombre de valeur de la liste (NB) (pour i de 0 a NB-1)
2-on va trier la liste (suivant la methode de tris par(BULLE) par exemple ) pour effectuer la recherche sans prob
3-donner a l'utilisateur la valeur rechercher
4-si Val=L((NB-1)/2) alors , ecrire (val trouvé)
5-sinon (c'est a dire val est <> soit sup ou inf )
6-repeter
( la question ICI ) ====> l'essentielle ICI
Jusqu'a
0