Fouille linéaire (séquentielle)

publicité
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
Téléchargement