J'ai ici un algo de recherche dichotomique que je voulais implementer en C++.
J'ai une solution à proposer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 PROCEDURE dicho (IN t:table, IN cle_cherchee : cles, OUT reussi : logique, OUT milieu indices) Est VAR gauche, droite : indices; DEBUT gauche := Bas(t); droite := haut(t); reussi := Faux; TANTQUE NON reussi ET gauche < droite BOUCLE milieu := indices#Val((Ord(gauche)+Ord(droite)) Div 2); SI cle_cherchee > cle(t[milieu]) ALORS gauche := Succ(milieu); OUSI cle_cherchee <> cle(t[milieu]) ALORS droite := Pred(milieu) SINON reussi := vrai FIN SI FIN BOUCLE FIN dicho;
Vos corrections sont les biens venues. Merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 void main(){ int t[8] = {1,4,8,12,15,22,25,30}; // tableau de 8 entiers int gauche = 0; // une variable que j'initialise au bas du tableau int droite = 7; // une variable que j'initialise au haut du tableau int milieu; int cle_cherchee = 22 // l'element cherche est 22 ( reussi := Faux) // je vois pas comment implementer cette instruction en C++ While ((NON reussi) && (gauche < droite)) // Comment implementer aussi (NON reussi)???? milieu = (gauche + droite) DIV 2; if (cle_cherchee > t[milieu]) { gauche = milieu+1; else if (cle_cherchee != t[milieu]) droite = milieu - 1; else reussi = (t[milieu]==cle_cherchee) } // FIN SI } // FIN DU PROG
Partager