0% ont trouvé ce document utile (0 vote)
75 vues43 pages

Recherche et Tri dans les Tableaux

Le document présente un cours d'algorithmique, axé sur la recherche dans les tableaux, incluant des concepts de base tels que la déclaration et l'accès aux tableaux, ainsi que des méthodes de recherche comme la recherche séquentielle et dichotomique. Il explique également les tableaux multi-dimensionnels et fournit des exemples d'algorithmes pour la saisie et l'affichage de matrices. Enfin, il aborde le principe de diviser pour régner dans le contexte de la recherche d'éléments dans des structures de données.

Transféré par

saidbenmedia
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
75 vues43 pages

Recherche et Tri dans les Tableaux

Le document présente un cours d'algorithmique, axé sur la recherche dans les tableaux, incluant des concepts de base tels que la déclaration et l'accès aux tableaux, ainsi que des méthodes de recherche comme la recherche séquentielle et dichotomique. Il explique également les tableaux multi-dimensionnels et fournit des exemples d'algorithmes pour la saisie et l'affichage de matrices. Enfin, il aborde le principe de diviser pour régner dans le contexte de la recherche d'éléments dans des structures de données.

Transféré par

saidbenmedia
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

UNIVERSITE IBN ZOHR

FACULTE DES SCIENCES APPLIQUEES


COMPUS UNIVERSITAIRE AIT MELLOUL

Informatique
FILIÈRE : IA - S2

ALGORITHMIQUE 2

ANNÉE U N I V ERSI TA IRE : 2 0 2 3- 2024


Pr. oulad sayad younes [Link]@[Link]
PLAN
Chapitre 1 : Notions de base en Algorithmique

Chapitre 2 : Les instructions itératives

Chapitre 3 : La Récursivité

Chapitre 4 : La Recherche dans un tableau

Chapitre 5 : Tri des éléments d’un tableau

Chapitre 6 : La complexité
Pr. oulad sayad younes 2
CHAPITRE 4 :
La Recherche dans un
tableau

Pr. oulad sayad younes 3


Rappel sur Les Tableaux

Pr. oulad sayad younes 4


Définition

• Un TABLEAU (ou VECTEUR) est une


juxtaposition, sous un NOM UNIQUE, d’un certain
nombre de VARIABLES DE MEME TYPE.

 Chaque variable porte le même nom mais est unique


grâce à son rang.

Pr. oulad sayad younes


5
Déclaration
• En pseudo code :

variable tableau identificateur[dimension] : type

identificateur : nom donné au tableau (= à chacune des variables qui le


composent)

dimension : nombre de variables du tableau (l’indice est alors compris entre 1


et nbre_elements)

type : type de données des variables composant le tableau

liste_de_valeurs : valeurs données à chacun des éléments du tableau

Pr. oulad sayad younes


6
Déclaration
• Exemples : déclaration

- VARIABLE TABLEAU note[6] : ENTIER

Pr. oulad sayad younes


7
Accès aux éléments d’un tableau
Exemple :
VARIABLE TABLEAU temperature[12] : ENTIER

Ecrire(temperature[8])

Pr. oulad sayad younes 8


Saisie et affichage d’un tableau
Algorithme qui permet de saisir et d'afficher les éléments d'un tableau de 30
notes:

Pr. oulad sayad younes 9


Dimensions, tableaux multi
dimensionnels
• La DIMENSION correspond à un nombre d’imbrications de
tableaux, chaque élément d’un tableau pouvant être composé d’un
autre tableau, etc.

• On parle de « tableau MULTI-DIMENSIONNEL » (à plusieurs


dimensions).

Pr. oulad sayad younes


10
Dimensions, tableaux multi
dimensionnels
Syntaxe tableau à 2 dimensions :

variable tableau identificateur[dimension1] [dimension2] : type

• Exemple : une matrice A de 3 lignes et 4 colonnes dont les


éléments sont réels
variable tableau A[3][4] : Réel

• A[i][j] permet d'accéder à l’élément de la matrice qui se trouve


à l’intersection de la ligne i et de la colonne j

Pr. oulad sayad younes


11
Dimensions, tableaux multi
dimensionnels
Exemple : tableau de températures de 2 ans, 12 mois par an

variable tableau temperature[2][12] : Entier

Dans un tableau à 2 dimensions, on pourra mémoriser


« elem1 » X « elem2 » valeurs.

Pr. oulad sayad younes


12
Accès aux tableaux multi
dimensionnels

L’ACCES A UN ELEMENT D’UN TABLEAU A PLUSIEURS DIMENSIONS


NECESSITE AUTANT D’INDICES QUE DE DIMENSIONS.

Pr. oulad sayad younes


13
Exemple : lecture d’une matrice
Algorithme qui permet de saisir les éléments d'une matrice de vingt lignes et
cinquante colonnes:

Pr. oulad sayad younes 14


Exemple : affichage d’une matrice
Algorithme qui permet d'afficher les éléments d'une matrice de vingt lignes et
cinquante colonnes:

Pr. oulad sayad younes 15


Tableaux Accès Parcours Recherche Tri

Problème de la recherche

Données : un tableau de n entiers naturels distincts, et une valeur v à trouver.


Résultat : si le tableau contient un élément de valeur v , alors afficher l’index de cet
élément ; sinon afficher "échec".
Algorithme de recherche

Le problème est de trouver un élément dans une structure linéaire (tableau).

- l'élément peut ne pas être présent


- l'élément peut être présent à plusieurs endroits
- si la structure a plusieurs dimensions, il faut fouiller chaque dimension

Technique intuitive : la recherche séquentielle


- on parcourt la structure dans l'ordre « naturel »
- on s'arrête au bout, ou quand on trouve l'élément
- parfois on peut s'arrêter plus tôt

Algorithmique et Programmation 2
Tableaux Accès Parcours Recherche Tri

Recherche séquentielle

Rechercher dans un tableau non trié


variables
entier notes[5] ← {18, 15, 10, 12, 14}
entier i, valeur
booléen trouvé

début
lire valeur
i ←0
répéter
trouvé ← notes[i] = valeur
i ← i +1
jusqu’à trouvé ou i = 5
si trouvé alors
afficher i − 1
sinon
afficher "échec"
fin
fin
Tableaux Accès Parcours Recherche Tri

Recherche séquentielle

Rechercher dans un tableau non trié


variables
entier notes[5] ← {18, 15, 10, 12, 14}
entier i, valeur
booléen trouvé notes
18 15 10 12 14
début 0 1 2 3 4
lire valeur
i ←0
répéter
trouvé ← notes[i] = valeur ? ? ?
i ← i +1 i valeur trouvé

jusqu’à trouvé ou i = 5
si trouvé alors
afficher i − 1
sinon Déclaration des variables
afficher "échec"
fin
fin
Tableaux Accès Parcours Recherche Tri

Recherche séquentielle

Rechercher dans un tableau non trié


variables
entier notes[5] ← {18, 15, 10, 12, 14}
entier i, valeur
booléen trouvé notes
18 15 10 12 14
début 0 1 2 3 4
lire valeur
i ←0
répéter
trouvé ← notes[i] = valeur 0 10 ?
i ← i +1 i valeur trouvé

jusqu’à trouvé ou i = 5
si trouvé alors
afficher i − 1
sinon Initialisation des variables
afficher "échec"
fin
fin
Tableaux Accès Parcours Recherche Tri

Recherche séquentielle

Rechercher dans un tableau non trié


variables
entier notes[5] ← {18, 15, 10, 12, 14}
entier i, valeur
booléen trouvé notes
18 15 10 12 14
début 0 1 2 3 4
lire valeur
i ←0
répéter
trouvé ← notes[i] = valeur 1 10 faux
i ← i +1 i valeur trouvé

jusqu’à trouvé ou i = 5
si trouvé alors
afficher i − 1
sinon Fin de la 1ère itération
afficher "échec"
fin
fin
Tableaux Accès Parcours Recherche Tri

Recherche séquentielle

Rechercher dans un tableau non trié


variables
entier notes[5] ← {18, 15, 10, 12, 14}
entier i, valeur
booléen trouvé notes
18 15 10 12 14
début 0 1 2 3 4
lire valeur
i ←0
répéter
trouvé ← notes[i] = valeur 2 10 faux
i ← i +1 i valeur trouvé

jusqu’à trouvé ou i = 5
si trouvé alors
afficher i − 1
sinon Fin de la 2ème itération
afficher "échec"
fin
fin
Tableaux Accès Parcours Recherche Tri

Recherche séquentielle

Rechercher dans un tableau non trié


variables
entier notes[5] ← {18, 15, 10, 12, 14}
entier i, valeur
booléen trouvé notes
18 15 10 12 14
début 0 1 2 3 4
lire valeur
i ←0
répéter
trouvé ← notes[i] = valeur 3 10 vrai
i ← i +1 i valeur trouvé

jusqu’à trouvé ou i = 5
si trouvé alors
afficher i − 1
sinon Fin de la 3ème itération
afficher "échec"
fin
fin
Tableaux Accès Parcours Recherche Tri

Recherche séquentielle

Rechercher dans un tableau non trié


variables
entier notes[5] ← {18, 15, 10, 12, 14}
entier i, valeur
booléen trouvé notes
18 15 10 12 14
début 0 1 2 3 4
lire valeur
i ←0
répéter
trouvé ← notes[i] = valeur 3 10 vrai
i ← i +1 i valeur trouvé

jusqu’à trouvé ou i = 5
si trouvé alors
afficher i − 1
sinon i < 5 donc le programme retourne 2
afficher "échec"
fin
fin
Divide ut imperes

Principe diviser pour régner : on découpe les données en différentes parties qu'on
traite séparément.

Exemple : pour rechercher un élément dans un tableau, on le coupe en deux et


on chercher dans chaque partie.

'a' 'c' 'c' 'd' 'f' 'm' 'n' 'p' 'v' 'x'

'a' 'c' 'c' 'd' 'f' 'm' 'n' 'p' 'v' 'x'

Ce principe est utile :


- si on peut lancer des programmes en parallèle, on mettra environ deux fois
moins de temps pour rechercher l'élément.
- si le tableau est trié, on peut ne chercher l'élément que dans une seule des
parties.

Algorithmique et Programmation 6
Recherche dichotomique

Recherche par dichotomie : le tableau est supposé trié par ordre croissant et on
cherche un élément e dans un tableau t

Principe de l'algorithme :
0- on regarde l'élément situé au milieu de t :
1- s'il s'agit de e c'est gagné.
2- s'il est plus grand que e, on cherche dans la moitié gauche
3- s'il est plus petit que e, on cherche dans la moitié droite

Remarques :
- ça ne peut marcher que si le tableau est trié
- on coupe le tableau en deux parties pas forcément égales en taille

Algorithmique et Programmation 7
Recherche dichotomique

Exemple : rechercher 490 dans le tableau d'entiers suivant.

121 568 569 701


4 17 25 26 45 45 87 102 234 237 490
3 1 0 2
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
121 568 569 701
4 17 25 26 45 45 87 102 234 237 490
3 1 0 2
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
121 568 569 701
4 17 25 26 45 45 87 102 234 237 490
3 1 0 2
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
121 568 569 701
4 17 25 26 45 45 87 102 234 237 490
3 1 0 2
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Remarque : on trouve 490 en 4 itérations, une recherche séquentielle aurait


demandé 11 itérations

Algorithmique et Programmation 8
Tableaux Accès Parcours Recherche Tri

Recherche dichotomique

60

Supposons que l’on ait un grand tableau d’éléments triés du plus


petit au plus grand. On cherche la valeur 60 dans le tableau.
Tableaux Accès Parcours Recherche Tri

Recherche dichotomique

60

81

On commence par regarder le milieu du tableau.


Tableaux Accès Parcours Recherche Tri

Recherche dichotomique

60

81

Comme la valeur recherchée est plus petite que 81 on re-


lance la recherche dans la moitié gauche du tableau.
Tableaux Accès Parcours Recherche Tri

Recherche dichotomique

60

55 81

On regarde le milieu de cette portion.


Tableaux Accès Parcours Recherche Tri

Recherche dichotomique

60

55 81

Comme la valeur recherchée est plus grande que 55 on re-


lance la recherche dans la moitié droite de la portion.
Tableaux Accès Parcours Recherche Tri

Recherche dichotomique

60

55 62 81

Et ainsi de suite . . .
Tableaux Accès Parcours Recherche Tri

Recherche dichotomique

60

55 60 62 81

. . . jusqu’à tomber sur la valeur recherchée, ou jusqu’à obtenir une portion vide.
Tableaux Accès Parcours Recherche Tri

Recherche dichotomique

Rechercher dans un tableau trié


variables
entier tableau[n] ← {· · · }
entier i, gauche, droite, valeur

début
lire valeur
gauche ← 0
droite ← n − 1
répéter
i ← (gauche + droite) / 2
si valeur < tableau[i] alors
droite ← i − 1
sinon
gauche ← i + 1
fin
jusqu’à (valeur = tableau[i]) ou (gauche > droite)
si valeur = tableau[i] alors
afficher i
sinon
afficher "échec"
fin
fin
Tableaux Accès Parcours Recherche Tri

Recherche dichotomique

Rechercher dans un tableau trié


variables
entier tableau[n] ← {· · · }
entier i, gauche, droite, valeur
Bornes de la portion à rechercher

début
lire valeur
gauche ← 0
droite ← n − 1
répéter
i ← (gauche + droite) / 2
si valeur < tableau[i] alors
droite ← i − 1
sinon
gauche ← i + 1
fin
jusqu’à (valeur = tableau[i]) ou (gauche > droite)
si valeur = tableau[i] alors
afficher i
sinon
afficher "échec"
fin
fin
Tableaux Accès Parcours Recherche Tri

Recherche dichotomique

Rechercher dans un tableau trié


variables
entier tableau[n] ← {· · · }
entier i, gauche, droite, valeur
Bornes de la portion à rechercher

début
lire valeur Milieu de la portion
gauche ← 0
droite ← n − 1
répéter
i ← (gauche + droite) / 2
si valeur < tableau[i] alors
droite ← i − 1
sinon
gauche ← i + 1
fin
jusqu’à (valeur = tableau[i]) ou (gauche > droite)
si valeur = tableau[i] alors
afficher i
sinon
afficher "échec"
fin
fin
Tableaux Accès Parcours Recherche Tri

Recherche dichotomique

Rechercher dans un tableau trié


variables
entier tableau[n] ← {· · · }
entier i, gauche, droite, valeur
Bornes de la portion à rechercher

début
lire valeur Milieu de la portion
gauche ← 0
droite ← n − 1
répéter Si la valeur est plus petite que le milieu
i ← (gauche + droite) / 2
si valeur < tableau[i] alors
droite ← i − 1
sinon
gauche ← i + 1
fin
jusqu’à (valeur = tableau[i]) ou (gauche > droite)
si valeur = tableau[i] alors
afficher i
sinon
afficher "échec"
fin
fin
Tableaux Accès Parcours Recherche Tri

Recherche dichotomique

Rechercher dans un tableau trié


variables
entier tableau[n] ← {· · · }
entier i, gauche, droite, valeur
Bornes de la portion à rechercher

début
lire valeur Milieu de la portion
gauche ← 0
droite ← n − 1
répéter Si la valeur est plus petite que le milieu
i ← (gauche + droite) / 2
si valeur < tableau[i] alors
droite ← i − 1 alors rechercher dans la moitié gauche
sinon
gauche ← i + 1
fin
jusqu’à (valeur = tableau[i]) ou (gauche > droite)
si valeur = tableau[i] alors
afficher i
sinon
afficher "échec"
fin
fin
Tableaux Accès Parcours Recherche Tri

Recherche dichotomique

Rechercher dans un tableau trié


variables
entier tableau[n] ← {· · · }
entier i, gauche, droite, valeur
Bornes de la portion à rechercher

début
lire valeur Milieu de la portion
gauche ← 0
droite ← n − 1
répéter Si la valeur est plus petite que le milieu
i ← (gauche + droite) / 2
si valeur < tableau[i] alors
droite ← i − 1 alors rechercher dans la moitié gauche
sinon
gauche ← i + 1
fin sinon rechercher dans la moitié droite
jusqu’à (valeur = tableau[i]) ou (gauche > droite)
si valeur = tableau[i] alors
afficher i
sinon
afficher "échec"
fin
fin
Tableaux Accès Parcours Recherche Tri

Recherche dichotomique

Rechercher dans un tableau trié


variables
entier tableau[n] ← {· · · }
entier i, gauche, droite, valeur
Bornes de la portion à rechercher

début
lire valeur Milieu de la portion
gauche ← 0
droite ← n − 1
répéter Si la valeur est plus petite que le milieu
i ← (gauche + droite) / 2
si valeur < tableau[i] alors
droite ← i − 1 alors rechercher dans la moitié gauche
sinon
gauche ← i + 1
fin sinon rechercher dans la moitié droite
jusqu’à (valeur = tableau[i]) ou (gauche > droite)
si valeur = tableau[i] alors continuer jusqu’à ce que la portion soit
afficher i vide
sinon
afficher "échec"
fin
fin
Tableaux Accès Parcours Recherche Tri

Recherche dichotomique

Rechercher dans un tableau trié


variables
entier tableau[n] ← {· · · }
entier i, gauche, droite, valeur
Bornes de la portion à rechercher

début
lire valeur Milieu de la portion
gauche ← 0
droite ← n − 1
répéter Si la valeur est plus petite que le milieu
i ← (gauche + droite) / 2
si valeur < tableau[i] alors
droite ← i − 1 alors rechercher dans la moitié gauche
sinon
gauche ← i + 1
fin sinon rechercher dans la moitié droite
jusqu’à (valeur = tableau[i]) ou (gauche > droite)
si valeur = tableau[i] alors continuer jusqu’à ce que la portion soit
afficher i vide
sinon
afficher "échec"
fin ou jusqu’à trouver l’index de la valeur
fin
Algorithme de recherche dichotomique

// cette fonction renvoie vrai si e est présente dans tab, faux sinon
// le tableau tab est supposé trié par ordre croissant
fonction avec retour booléen rechercheElement3(chaine tab[], chaine e)
entier i, j;
booléen trouve;
début
trouve <- false;
i <- 0;
j <- [Link]-1;
tantque (i <= j et non trouve) faire
si (tab[(j+i)/2] = e) alors
trouve <- vrai;
sinon
si (tab[(j+i)/2] > e) alors
j <- (j+i)/2 - 1;
sinon
i <- (j+i)/2 + 1;
finsi
finsi
fintantque
retourne trouve;
fin

Algorithmique et Programmation 9

Vous aimerez peut-être aussi