Fouille linéaire (séquentielle) ● ● ● La fouille linéaire a pour but de retourner la position dans un tableau d'une valeur donnée. Soit le tableau {0, 3, 7, 1}, le résultat d'une fouille linéaire qui recherche 3 serait 1. La valeure 3 se trouve à la position 1 Fouille linéaire (séquentielle) i←1; tant que i ≤ n et x ≠ ai faire i←i+1; fin tant que si i ≤ n alors position ← i ; sinon position ← 0 ; fin si retourner position ; Fouille dichotomique ● Dichotomique = “Couper en deux” en grec ● Procéssus de recherche itératif ● ● ● ● Julie sait que le nombre est entre 0 et 100 ; au milieu se trouve 50, elle demande donc : « Est-ce que le nombre est plus grand que 50 ? ». Paul répond « Oui ». Julie sait maintenant que le nombre est entre 51 et 100 ; au milieu se trouve 75, elle demande donc : « Est-ce que le nombre est plus grand que 75 ? » Paul répond « Non » Et ainsi de suite : « Plus grand que 63? (63 =(51+75)÷2) », « Oui », « Plus grand que 69 ?(69 =(63+75)÷2) », « Non », « Plus grand que 66 ?(66 =(69+63)÷2) », « Non », « Plus grand que 65 ? (65 ≈(63+66)÷2) », « Oui ». Julie sait maintenant que le nombre est entre 66 et 66, autrement dit qu'il s'agit de 66 : elle a trouvé le nombre choisi par Paul. Algorithme pour la fouille dichotomique (1/2) //déclarations début, fin, val, mil, N : Entiers t : Tableau [0..N] d'entiers classé trouvé : Booléen //initialisation début ← 0 fin ← N trouvé ← faux Saisir val Algorithme pour la fouille dichotomique (2/2) //Boucle de recherche Répéter mil ← partie entière((début + fin)/2) Si t[mil] = val alors trouvé ← vrai Sinon Si val > t[mil] Alors début ← mil+1 Sinon fin ← mil-1 FinSi FinSi // La condition début inférieur ou égal à fin permet d'éviter de faire // une boucle infinie si 'val' n'existe pas dans le tableau. Tant que trouvé = faux ET début ≤ fin //Affichage du résultat Si trouvé Alors Afficher "La valeur ", val , " est au rang ", mil Sinon Afficher "La valeur ", val , " n'est pas dans le tableau" FinSi