Structures de données IFT-10541 Abder Alikacem Semaine 7 Les algorithmes de recherche Édition septembre 2009 Département d’informatique et de génie logiciel
Plan Les algorithmes de recherche La recherche séquentielle La recherche dichotomique Complexité des algorithmes de recherche Recherche dichotomique et arborescence
La recherche séquentielle Données pas triées 3 1 4 2 8 14 12 11 6 9 10 recherche(3) = recherche(10) = recherche(12) = recherche(13) = meilleur cas = pire cas = en moyenne = absences =
La recherche séquentielle Données pas triées 3 1 4 2 8 14 12 11 6 9 10 recherche(3) = 1 comparaison recherche(10) = recherche(12) = recherche(13) = meilleur cas = pire cas = en moyenne = absences =
La recherche séquentielle Données pas triées 3 1 4 2 8 14 12 11 6 9 10 recherche(3) = 1 comparaison recherche(10) = 11 comparaisons recherche(12) = recherche(13) = meilleur cas = pire cas = en moyenne = absences =
La recherche séquentielle Données pas triées 3 1 4 2 8 14 12 11 6 9 10 recherche(3) = 1 comparaison recherche(10) = 11 comparaisons recherche(12) = 7 comparaisons recherche(13) = meilleur cas = pire cas = en moyenne = absences =
La recherche séquentielle Données pas triées 3 1 4 2 8 14 12 11 6 9 10 recherche(3) = 1 comparaison recherche(10) = 11 comparaisons recherche(12) = 7 comparaisons recherche(13) = 11 comparaisons meilleur cas = pire cas = en moyenne = absences =
La recherche séquentielle Données pas triées 3 1 4 2 8 14 12 11 6 9 10 recherche(3) = 1 comparaison recherche(10) = 11 comparaisons recherche(12) = 7 comparaisons recherche(13) = 11 comparaisons meilleur cas = O(1) pire cas = en moyenne = absences =
La recherche séquentielle Données pas triées 3 1 4 2 8 14 12 11 6 9 10 recherche(3) = 1 comparaison recherche(10) = 11 comparaisons recherche(12) = 7 comparaisons recherche(13) = 11 comparaisons meilleur cas = O(1) pire cas = O(n) en moyenne = absences =
La recherche séquentielle Données pas triées 3 1 4 2 8 14 12 11 6 9 10 recherche(3) = 1 comparaison recherche(10) = 11 comparaisons recherche(12) = 7 comparaisons recherche(13) = 11 comparaisons meilleur cas = O(1) pire cas = O(n) en moyenne = O(n/2) absences =
La recherche séquentielle Données pas triées 3 1 4 2 8 14 12 11 6 9 10 recherche(3) = 1 comparaison recherche(10) = 11 comparaisons recherche(12) = 7 comparaisons recherche(13) = 11 comparaisons meilleur cas = O(1) pire cas = O(n) en moyenne = O(n/2) absences = O(n)
La recherche séquentielle Données triées 1 2 3 4 6 8 9 10 11 12 14 recherche(1) = recherche(14) = recherche(8) = recherche(13) = meilleur cas = pire cas = en moyenne = absences =
La recherche séquentielle Données triées 1 2 3 4 6 8 9 10 11 12 14 recherche(1) = 1 comparaison recherche(14) = recherche(8) = recherche(13) = meilleur cas = pire cas = en moyenne = absences =
La recherche séquentielle Données triées 1 2 3 4 6 8 9 10 11 12 14 recherche(1) = 1 comparaison recherche(14) = 11 comparaisons recherche(8) = recherche(13) = meilleur cas = pire cas = en moyenne = absences =
La recherche séquentielle Données triées 1 2 3 4 6 8 9 10 11 12 14 recherche(1) = 1 comparaison recherche(14) = 11 comparaisons recherche(8) = 6 comparaisons recherche(13) = meilleur cas = pire cas = en moyenne = absences =
La recherche séquentielle Données triées 1 2 3 4 6 8 9 10 11 12 14 recherche(1) = 1 comparaison recherche(14) = 11 comparaisons recherche(8) = 6 comparaisons recherche(13) = 11 comparaisons meilleur cas = pire cas = en moyenne = absences =
La recherche séquentielle Données triées 1 2 3 4 6 8 9 10 11 12 14 recherche(1) = 1 comparaison recherche(14) = 11 comparaisons recherche(8) = 6 comparaisons recherche(13) = 11 comparaisons meilleur cas = O(1) pire cas = en moyenne = absences =
La recherche séquentielle Données triées 1 2 3 4 6 8 9 10 11 12 14 recherche(1) = 1 comparaison recherche(14) = 11 comparaisons recherche(8) = 6 comparaisons recherche(13) = 11 comparaisons meilleur cas = O(1) pire cas = O(n) en moyenne = absences =
La recherche séquentielle Données triées 1 2 3 4 6 8 9 10 11 12 14 recherche(1) = 1 comparaison recherche(14) = 11 comparaisons recherche(8) = 6 comparaisons recherche(13) = 11 comparaisons meilleur cas = O(1) pire cas = O(n) en moyenne = O(n/2) absences =
La recherche séquentielle Données triées 1 2 3 4 6 8 9 10 11 12 14 recherche(1) = 1 comparaison recherche(14) = 11 comparaisons recherche(8) = 6 comparaisons recherche(13) = 11 comparaisons meilleur cas = O(1) pire cas = O(n) en moyenne = O(n/2) absences = O(n/2)
La recherche séquentielle données non triées : données présentes : O(n/2) données absentes : O(n) données triées : données absentes : O(n/2) coût pour trier et maintenir triées !
Modèles d’implantation tableau : liste chaînée : 1 2 3 4 6 8 9 10 11 12 14 1 2 3 4 6 8 9 10 11 12 14
La recherche binaire 1 2 3 4 6 8 9 10 11 12 14 implantation en tableau = accès direct à n’importe quel élément en regardant tout de suite au milieu, on peut éliminer la moitié des données
La recherche binaire 1 2 3 4 6 8 9 10 11 12 14 10
La recherche binaire 1 2 3 4 6 8 9 10 11 12 14 5 10
La recherche binaire 1 2 3 4 6 8 9 10 11 12 14 5 10
La recherche binaire 1 2 3 4 6 8 9 10 11 12 14 5 10
La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10
La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10
La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 10
La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10
La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10
La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10
La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10 1 2 3 4 6 8 9 10 11 12 14 6 7
La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10 1 2 3 4 6 8 9 10 11 12 14 6 7
La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10 1 2 3 4 6 8 9 10 11 12 14 6 7
La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10 1 2 3 4 6 8 9 10 11 12 14 6 7 1 2 3 4 6 8 9 10 11 12 14 7
La recherche binaire : 10 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10 1 2 3 4 6 8 9 10 11 12 14 6 7 1 2 3 4 6 8 9 10 11 12 14 7
La recherche binaire : 9.5 ? 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10 1 2 3 4 6 8 9 10 11 12 14 6 7 1 2 3 4 6 8 9 10 11 12 14 7
La recherche binaire : 9.5 ? 1 2 3 4 6 8 9 10 11 12 14 11 5 10 1 2 3 4 6 8 9 10 11 12 14 5 6 8 10 2 1 2 3 4 6 8 9 10 11 12 14 6 7 1 2 3 4 6 8 9 10 11 12 14 1 7
La recherche binaire : 9.5 ? 11 n 5 n/2 2 n/4 1 n/8 1 2 3 4 6 8 9 10 12 14 11 n 5 10 1 2 3 4 6 8 9 10 11 12 14 5 n/2 6 8 10 2 n/4 1 2 3 4 6 8 9 10 11 12 14 6 7 1 2 3 4 6 8 9 10 11 12 14 1 n/8 7
Algorithme récursif récursion ? conditions d’arrêt ? convergence ? 1 2 3 4 6 8 9 10 11 12 14 5 10 récursion ? conditions d’arrêt ? convergence ?
Récursion si x = tab[milieu] (condition d’arrêt) 1 2 3 4 6 8 9 10 11 12 14 5 10 x tab[debut..fin] si x = tab[milieu] (condition d’arrêt) si x < tab[milieu] et x tab[debut..milieu-1] si x > tab[milieu] et x tab[milieu+1..fin]
Conditions d’arrêt 1 2 3 4 6 8 9 10 11 12 14 5 10 x tab[debut..fin] si debut > fin x tab[debut..fin] si x = tab[milieu]
Convergence 1 2 3 4 6 8 9 10 11 12 14 5 10 1 2 3 4 6 8 9 10 11 12 14 6 8 10 1 2 3 4 6 8 9 10 11 12 14 6 7 1 2 3 4 6 8 9 10 11 12 14 7
Template <typename T> int rechercheBinRec(T * tab, T val, int debut, int fin) { int milieu; /*A: tab est correctement initialisé*/ if (debut > fin) return -1; else { milieu= (debut + fin)/2; if( val == tab[milieu]) return milieu; { if( val < tab[milieu]) return(rechercheBinRec(tab,val,debut, milieu-1)); else return(rechercheBinRec(tab,val,milieu+1,fin)); }
Remarque sur les algorithmes récursifs Il vaut bien mieux implanter cet algorithme de manière itérative, car la fonction se rappelle jusqu'à trouver la position désirée, puis seulement on effectue les dépilages, alors que l'on n'a plus besoin des états intermédiaires qui ont été mémorisés par la récursivité puisque le problème est résolu.
Tableau comparatif recherche séquentielle : (données triées) données présentes : O(n/2) données absentes : O(n/2) recherche binaire : (données triées) données présentes : O(log n) données absentes : O(log n)
Modèles d’implantation tableau : liste chaînée ? 1 2 3 4 6 8 9 10 11 12 14 10 1 2 3 4 6 8 9 10 11 12 14
Structures pointées 1 2 3 4 6 8 9 10 11 12 14 1 2 3 4 5 6 7 8 9 10
Structures pointées 1 2 3 4 6 8 9 10 11 12 14 1 2 3 4 5 6 7 8 9 10
Structures pointées 1 2 3 4 6 8 9 10 11 12 14 1 2 3 4 5 6 7 8 9 10
Structures pointées 8 1 2 3 4 6 9 10 11 12 14 1 2 3 4 6 7 8 9 10
Structures pointées 8 1 2 3 4 6 9 10 11 12 14 1 2 3 4 6 7 8 9 10
Structures pointées 8 1 2 3 4 6 9 10 11 12 14 1 2 3 4 6 7 8 9 10
Structures pointées 8 3 11 1 2 4 6 9 10 12 14 1 3 4 6 7 9 10
Structures pointées 8 3 11 1 2 4 6 9 10 12 14 1 3 4 6 7 9 10
Structures pointées 8 3 11 1 2 4 6 9 10 12 14 1 3 4 6 7 9 10
Structures pointées 8 3 11 2 4 10 12 1 6 9 14
Structures pointées 8 3 11 2 4 10 12 1 6 9 14
Structures pointées 8 3 11 2 4 10 12 1 6 9 14
Structures pointées 8 3 11 2 4 10 12 1 6 9 14
Arbre binaire ! 8 3 11 2 4 10 12 1 6 9 14
Arbre binaire ! ≤ 8 ≤ ≤ 3 ≤ 11 ≤ ≤ ≤ 2 4 ≤ ≤ 10 12 ≤ 1 6 9 14
Arbre binaire racine nœuds internes feuilles sous-arbre de gauche sous-arbre de droite
Arbre = graphe 8 3 11 2 4 10 12 1 6 9 14
Arbre = graphe 8 3 11 2 4 10 12 1 6 9 14
Arbre = graphe 8 3 11 2 4 10 12 1 6 9 14
Arbre = graphe graphe connexe, orienté, acyclique 1 seul nœud source = racine nœuds puits = feuilles ordre d ’entrée de tout nœud = 1, sauf racine un chemin de la racine à tout autre nœud
Arbre = index 8 3 11 2 4 10 12 1 6 9 14
Arbre = index 8 3 11 2 4 10 12 1 6 9 14
Index sur sommet d’un graphe 4 2 5 3 1 1 2 3 4 5 ... 1 1 2 1 1 3 4 1 1 5 1
Index sur sommet d’un graphe 4 2 5 3 1 3 2 5 1 4 1 2 3 4 5 ... 1 1 2 1 1 3 4 1 1 5 1