Chapitre 4 : Algorithmes de recherche et de tri Faculté des Sciences, Oujda Master Spécialisé Ingénierie Informatique Université Mohamed Premier Septembre, 2012
Sommaire du chapitre 4
Sommaire du chapitre 4 Algorithmes de recherche
Sommaire du chapitre 4 Algorithmes de recherche Algorithmes de tri
Algorithmes de recherche Problème de recherche Définition 1.1
Algorithmes de recherche Problème de recherche Définition 1.1 Entrée :
Algorithmes de recherche Problème de recherche Définition 1.1 Entrée : 1 Une liste a de taille n.
Algorithmes de recherche Problème de recherche Définition 1.1 Entrée : 1 Une liste a de taille n. 2 Un élément e.
Algorithmes de recherche Problème de recherche Définition 1.1 Entrée : 1 Une liste a de taille n. 2 Un élément e. Sortie :
Algorithmes de recherche Problème de recherche Définition 1.1 Entrée : 1 Une liste a de taille n. 2 Un élément e. Sortie : 1 Indice de l élément e dans a, si e a.
Algorithmes de recherche Problème de recherche Définition 1.1 Entrée : 1 Une liste a de taille n. 2 Un élément e. Sortie : 1 Indice de l élément e dans a, si e a. 2 0, sinon.
Algorithmes de recherche Algorithme de recherche séquentielle
Algorithmes de recherche Algorithme de recherche séquentielle Idée : parcourir la liste a.
Algorithmes de recherche Algorithme de recherche séquentielle Idée : parcourir la liste a. Élément par élément (de gauche à droite, ou de droite à gauche);
Algorithmes de recherche Algorithme de recherche séquentielle Idée : parcourir la liste a. Élément par élément (de gauche à droite, ou de droite à gauche); En commençant du premier (ou dernier) élément;
Algorithmes de recherche Algorithme de recherche séquentielle Idée : parcourir la liste a. Élément par élément (de gauche à droite, ou de droite à gauche); En commençant du premier (ou dernier) élément; Jusqu à trouver l élément e, ou atteindre la fin (ou le début) de la liste.
Algorithmes de recherche Pseudo-code 1.2
Algorithmes de recherche Pseudo-code 1.2 Fonction Rech Séq(a : Liste; n, e : Entier) : Entier Var i : Entier; Début Pour i := 1 à n Faire Si(a[i] = e) Alors Retourner (i); FinSi FinPour Retourner (0); Fin
Algorithmes de recherche Complexité
Algorithmes de recherche Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme.
Algorithmes de recherche Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas :
Algorithmes de recherche Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe, mais en dernière position (cas d une recherche orientée de gauche à droite).
Algorithmes de recherche Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe, mais en dernière position (cas d une recherche orientée de gauche à droite). C(n) = n = O(n).
Algorithmes de recherche Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe, mais en dernière position (cas d une recherche orientée de gauche à droite). C(n) = n = O(n). Dans le meilleur des cas :
Algorithmes de recherche Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe, mais en dernière position (cas d une recherche orientée de gauche à droite). C(n) = n = O(n). Dans le meilleur des cas : L élément e existe en première position (cas d une recherche orientée de gauche à droite).
Algorithmes de recherche Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe, mais en dernière position (cas d une recherche orientée de gauche à droite). C(n) = n = O(n). Dans le meilleur des cas : L élément e existe en première position (cas d une recherche orientée de gauche à droite). C(n) = 1 = Ω(1).
Algorithmes de recherche Algorithme de recherche dichotomique
Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée.
Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée. Idée :
Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée. Idée : 1 Tant que cela est possible, diviser la liste a en 2 sous-listes : a[d...m] et a[m + 1...f ] où m est le milieu de [d...f ].
Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée. Idée : 1 Tant que cela est possible, diviser la liste a en 2 sous-listes : a[d...m] et a[m + 1...f ] où m est le milieu de [d...f ]. 2 Comparer e avec l élément a m. Il y a trois cas.
Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée. Idée : 1 Tant que cela est possible, diviser la liste a en 2 sous-listes : a[d...m] et a[m + 1...f ] où m est le milieu de [d...f ]. 2 Comparer e avec l élément a m. Il y a trois cas. Si e = a m : on a trouvé l élément e à l indice m.
Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée. Idée : 1 Tant que cela est possible, diviser la liste a en 2 sous-listes : a[d...m] et a[m + 1...f ] où m est le milieu de [d...f ]. 2 Comparer e avec l élément a m. Il y a trois cas. Si e = a m : on a trouvé l élément e à l indice m. Si e > a m : lancer la recherche dans le sous-tableau a[m + 1...f ].
Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée. Idée : 1 Tant que cela est possible, diviser la liste a en 2 sous-listes : a[d...m] et a[m + 1...f ] où m est le milieu de [d...f ]. 2 Comparer e avec l élément a m. Il y a trois cas. Si e = a m : on a trouvé l élément e à l indice m. Si e > a m : lancer la recherche dans le sous-tableau a[m + 1...f ]. Si e < a m : lancer la recherche dans le sous-tableau a[d...m 1].
Algorithmes de recherche Algorithme de recherche dichotomique Hypothèse : la liste a[d...f ] est déjà triée. Idée : 1 Tant que cela est possible, diviser la liste a en 2 sous-listes : a[d...m] et a[m + 1...f ] où m est le milieu de [d...f ]. 2 Comparer e avec l élément a m. Il y a trois cas. Si e = a m : on a trouvé l élément e à l indice m. Si e > a m : lancer la recherche dans le sous-tableau a[m + 1...f ]. Si e < a m : lancer la recherche dans le sous-tableau a[d...m 1]. Il s agit bien d un algorithme de type Diviser pour régner.
Algorithmes de recherche Pseudo-code 1.3
Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier
Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier;
Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début
Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début Si(d > f ) Alors Retourner (0); FinSi
Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début Si(d > f ) Alors Retourner (0); FinSi m := d+f 2 ;
Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début Si(d > f ) Alors Retourner (0); FinSi m := d+f ; 2 Si(a[m] = e) Alors Retourner (m); FinSi
Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début Si(d > f ) Alors Retourner (0); FinSi m := d+f ; 2 Si(a[m] = e) Alors Retourner (m); FinSi Si(a[m] < e) Alors Retourner Rech Dicho(a, m + 1, f, e);
Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début Si(d > f ) Alors Retourner (0); FinSi m := d+f ; 2 Si(a[m] = e) Alors Retourner (m); FinSi Si(a[m] < e) Alors Retourner Rech Dicho(a, m + 1, f, e); Sinon Retourner Rech Dicho(a, d, m 1, e);
Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début Si(d > f ) Alors Retourner (0); FinSi m := d+f ; 2 Si(a[m] = e) Alors Retourner (m); FinSi Si(a[m] < e) Alors Retourner Rech Dicho(a, m + 1, f, e); Sinon Retourner Rech Dicho(a, d, m 1, e); FinSi
Algorithmes de recherche Pseudo-code 1.3 Fonction Rech Dicho(a : Liste; d, f, e : Entier) : Entier Var m : Entier; Début Si(d > f ) Alors Retourner (0); FinSi m := d+f ; 2 Si(a[m] = e) Alors Retourner (m); FinSi Si(a[m] < e) Alors Retourner Rech Dicho(a, m + 1, f, e); Sinon Retourner Rech Dicho(a, d, m 1, e); FinSi Fin
Algorithmes de recherche Complexité
Algorithmes de recherche Complexité Soit n = f d + 1, la taille de la liste a.
Algorithmes de recherche Complexité Soit n = f d + 1, la taille de la liste a. Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas :
Algorithmes de recherche Complexité Soit n = f d + 1, la taille de la liste a. Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe en une position extrêmale.
Algorithmes de recherche Complexité Soit n = f d + 1, la taille de la liste a. Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe en une position extrêmale. { 0 si n = 0 C(n) = C( n 2 ) + 2 si n 1
Algorithmes de recherche Complexité Soit n = f d + 1, la taille de la liste a. Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : L élément e n existe pas dans la liste a, ou bien il existe en une position extrêmale. { 0 si n = 0 C(n) = C( n 2 ) + 2 si n 1 Alors : C(n) = Θ(log 2 n).
Problème de tri Définition 1.4
Problème de tri Définition 1.4 Entrée :
Problème de tri Définition 1.4 Entrée : Une liste a de taille n.
Problème de tri Définition 1.4 Entrée : Une liste a de taille n. Sortie :
Problème de tri Définition 1.4 Entrée : Une liste a de taille n. Sortie : Une permutation de la liste a qui soit ordonnée en sens croissant ou décroissant.
Algorithme de tri par sélection
Algorithme de tri par sélection Deux formes de sélection : maximum ou minimum. Idée : À chaque itération i de l algorithme :
Algorithme de tri par sélection Deux formes de sélection : maximum ou minimum. Idée : À chaque itération i de l algorithme : 1 On cherche le minimum du tableau a[i...n] non encore trié.
Algorithme de tri par sélection Deux formes de sélection : maximum ou minimum. Idée : À chaque itération i de l algorithme : 1 On cherche le minimum du tableau a[i...n] non encore trié. 2 On l échange avec a i (le premier élément dans ce tableau).
Pseudo-code 1.5
Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier
Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] }
Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier;
Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier; Début
Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier; Début j := d;
Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier; Début j := d; Pout i := d + 1 à f Faire
Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier; Début j := d; Pout i := d + 1 à f Faire Si(a[i] < a[j]) Alors j := i; FinSi
Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier; Début j := d; Pout i := d + 1 à f Faire Si(a[i] < a[j]) Alors j := i; FinSi FinPour
Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier; Début j := d; Pout i := d + 1 à f Faire Si(a[i] < a[j]) Alors j := i; FinSi FinPour Retourner (j);
Pseudo-code 1.5 Fonction Obtenir Min(a : Liste; d, f : Entier) : Entier { retourne l indice du minimum du tableau a[d...f ] } Var i, j : Entier; Début j := d; Pout i := d + 1 à f Faire Si(a[i] < a[j]) Alors j := i; FinSi FinPour Retourner (j); Fin
Pseudo-code 1.6
Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier)
Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier) { échange les deux éléments a[i] et a[j] }
Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier) { échange les deux éléments a[i] et a[j] } Var t : Entier;
Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier) { échange les deux éléments a[i] et a[j] } Var t : Entier; Début
Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier) { échange les deux éléments a[i] et a[j] } Var t : Entier; Début t := a[i];
Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier) { échange les deux éléments a[i] et a[j] } Var t : Entier; Début t := a[i]; a[i] := a[j];
Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier) { échange les deux éléments a[i] et a[j] } Var t : Entier; Début t := a[i]; a[i] := a[j]; a[j] := t;
Pseudo-code 1.6 Fonction Echanger(a : Liste; i, j : Entier) { échange les deux éléments a[i] et a[j] } Var t : Entier; Début t := a[i]; a[i] := a[j]; a[j] := t; Fin
Pseudo-code 1.7
Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier)
Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum }
Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum } Var i, imin : Entier;
Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum } Var i, imin : Entier; Début
Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum } Var i, imin : Entier; Début Pour i := 1 à (n 1) Faire
Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum } Var i, imin : Entier; Début Pour i := 1 à (n 1) Faire imin := Obtenir Min(a, i, n);
Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum } Var i, imin : Entier; Début Pour i := 1 à (n 1) Faire imin := Obtenir Min(a, i, n); Si(imin i) Alors Echanger(a, i, imin) FinSi
Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum } Var i, imin : Entier; Début Pour i := 1 à (n 1) Faire imin := Obtenir Min(a, i, n); Si(imin i) Alors Echanger(a, i, imin) FinSi FinPour
Pseudo-code 1.7 Fonction Tri Sélection(a : Liste; n : Entier) { algorithme de tri par sélection du minimum } Var i, imin : Entier; Début Pour i := 1 à (n 1) Faire imin := Obtenir Min(a, i, n); Si(imin i) Alors Echanger(a, i, imin) FinSi FinPour Fin
Complexité
Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme.
Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Coût de la procédure Obtenir Min en comparaisons : (f d).
Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Coût de la procédure Obtenir Min en comparaisons : (f d). Coût de la procédure Tri Selction en comparaisons :
Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Coût de la procédure Obtenir Min en comparaisons : (f d). Coût de la procédure Tri Selction en comparaisons : À chaque itération i, l algorithme effectue (n i) comparaisons.
Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Coût de la procédure Obtenir Min en comparaisons : (f d). Coût de la procédure Tri Selction en comparaisons : À chaque itération i, l algorithme effectue (n i) comparaisons. C(n) = n 1 (n 1)n i=1 (n i) = (n 1)+(n 2)+...+1 = 2.
Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Coût de la procédure Obtenir Min en comparaisons : (f d). Coût de la procédure Tri Selction en comparaisons : À chaque itération i, l algorithme effectue (n i) comparaisons. C(n) = n 1 (n 1)n i=1 (n i) = (n 1)+(n 2)+...+1 = L algorithme tourne alors en Θ(n 2 ). 2.
Algorithme de tri par insertion
Algorithme de tri par insertion Idée : À chaque itération i de l algorithme :
Algorithme de tri par insertion Idée : À chaque itération i de l algorithme : Placer l élément a[i] dans le tableau a[1...i 1] (déjà trié) dans sa place convenable.
Pseudo-code 1.8
Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier)
Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion }
Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier;
Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début
Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire
Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire key := a[i]; j := i 1;
Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire key := a[i]; j := i 1; Tant Que((j > 0) et (a[j] > key)) Faire
Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire key := a[i]; j := i 1; Tant Que((j > 0) et (a[j] > key)) Faire a[j + 1] := a[j]; j := j 1;
Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire key := a[i]; j := i 1; Tant Que((j > 0) et (a[j] > key)) Faire a[j + 1] := a[j]; j := j 1; FinTQ
Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire key := a[i]; j := i 1; Tant Que((j > 0) et (a[j] > key)) Faire a[j + 1] := a[j]; j := j 1; FinTQ a[j + 1] := key;
Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire key := a[i]; j := i 1; Tant Que((j > 0) et (a[j] > key)) Faire a[j + 1] := a[j]; j := j 1; FinTQ a[j + 1] := key; FinPour
Pseudo-code 1.8 Fonction Tri Insertion(a : Liste; n : Entier) { algorithme de tri par insertion } Var i, j, key : Entier; Début Pour i := 2 à n Faire key := a[i]; j := i 1; Tant Que((j > 0) et (a[j] > key)) Faire a[j + 1] := a[j]; j := j 1; FinTQ a[j + 1] := key; FinPour Fin
Complexité
Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme.
Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas :
Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : Configuration : un tableau trié dans l ordre décroissant (le tableau est trié dans l ordre inverse).
Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : Configuration : un tableau trié dans l ordre décroissant (le tableau est trié dans l ordre inverse). Placer l élément a[i] dans le tableau a[1...i 1] nécessite (i 1) comparaisons.
Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : Configuration : un tableau trié dans l ordre décroissant (le tableau est trié dans l ordre inverse). Placer l élément a[i] dans le tableau a[1...i 1] nécessite (i 1) comparaisons. C(n) = n i=2 (i 1) = 1 + 2 +... + (n 1) = (n 1)n 2.
Complexité Soit C(n) le nombre de comparaisons effectuées par l algorithme. Dans le pire des cas : Configuration : un tableau trié dans l ordre décroissant (le tableau est trié dans l ordre inverse). Placer l élément a[i] dans le tableau a[1...i 1] nécessite (i 1) comparaisons. C(n) = n (n 1)n i=2 (i 1) = 1 + 2 +... + (n 1) = 2. Par suite : C(n) = O(n 2 ).
Complexité
Complexité Dans le meilleur des cas :
Complexité Dans le meilleur des cas : Configuration : un tableau trié dans l ordre croissant (le tableau est déjà trié).
Complexité Dans le meilleur des cas : Configuration : un tableau trié dans l ordre croissant (le tableau est déjà trié). Placer l élément a[i] dans le tableau a[1...i 1] nécessite une seule comparaison.
Complexité Dans le meilleur des cas : Configuration : un tableau trié dans l ordre croissant (le tableau est déjà trié). Placer l élément a[i] dans le tableau a[1...i 1] nécessite une seule comparaison. C(n) = n i=2 (1) = 1 + 1 +... + 1 = (n 1).
Complexité Dans le meilleur des cas : Configuration : un tableau trié dans l ordre croissant (le tableau est déjà trié). Placer l élément a[i] dans le tableau a[1...i 1] nécessite une seule comparaison. C(n) = n i=2 (1) = 1 + 1 +... + 1 = (n 1). Par suite : C(n) = Ω(n).
Algorithme de tri à bulles
Algorithme de tri à bulles Idée :
Algorithme de tri à bulles Idée : Consiste à permuter les éléments adjacents s ils ne sont pas ordonnés.
Algorithme de tri à bulles Idée : Consiste à permuter les éléments adjacents s ils ne sont pas ordonnés. Continuer ce processus jusqu à ce que le tableau soit entièrement trié.
Algorithme de tri à bulles Idée : Consiste à permuter les éléments adjacents s ils ne sont pas ordonnés. Continuer ce processus jusqu à ce que le tableau soit entièrement trié. À chaque itération i, on parcourt le tableau de droite à gauche pour placer le minimum dans la position i par une suite d échange d éléments adjacents.
Pseudo-code 1.9
Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier)
Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles }
Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier;
Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début
Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire
Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire Pour j := n à (i + 1) Par Pas de ( 1) Faire
Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire Pour j := n à (i + 1) Par Pas de ( 1) Faire Si(a[j] < a[j 1]) Alors
Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire Pour j := n à (i + 1) Par Pas de ( 1) Faire Si(a[j] < a[j 1]) Alors Echanger(a, j 1, j);
Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire Pour j := n à (i + 1) Par Pas de ( 1) Faire Si(a[j] < a[j 1]) Alors Echanger(a, j 1, j); FinSi
Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire Pour j := n à (i + 1) Par Pas de ( 1) Faire Si(a[j] < a[j 1]) Alors Echanger(a, j 1, j); FinSi FinPour
Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire Pour j := n à (i + 1) Par Pas de ( 1) Faire Si(a[j] < a[j 1]) Alors Echanger(a, j 1, j); FinSi FinPour FinPour
Pseudo-code 1.9 Fonction Tri Bulles(a : Liste; n : Entier) { algorithme de tri à bulles } Var i, j : Entier; Début Pour i := 1 à (n 1) Faire Pour j := n à (i + 1) Par Pas de ( 1) Faire Si(a[j] < a[j 1]) Alors Echanger(a, j 1, j); FinSi FinPour FinPour Fin
Complexité
Complexité Soit C(n) le nombre de comparaisons effectuées par le tri à bulles.
Complexité Soit C(n) le nombre de comparaisons effectuées par le tri à bulles. À chaque itération i, on effectue (n i) comparaisons.
Complexité Soit C(n) le nombre de comparaisons effectuées par le tri à bulles. À chaque itération i, on effectue (n i) comparaisons. C(n) = n 1 (n 1)n i=1 (n i) = (n 1) + (n 2) +... + 1 =. 2
Complexité Soit C(n) le nombre de comparaisons effectuées par le tri à bulles. À chaque itération i, on effectue (n i) comparaisons. C(n) = n 1 (n 1)n i=1 (n i) = (n 1) + (n 2) +... + 1 =. 2 L algorithme est alors en Θ(n 2 )
Algorithme de tri par fusion
Algorithme de tri par fusion Il s agit d un algorithme de type Diviser pour régner.
Algorithme de tri par fusion Il s agit d un algorithme de type Diviser pour régner. Idée :
Algorithme de tri par fusion Il s agit d un algorithme de type Diviser pour régner. Idée : Diviser le tableau de taille n, en 2 sous-tableaux de taille n 2 chacun.
Algorithme de tri par fusion Il s agit d un algorithme de type Diviser pour régner. Idée : Diviser le tableau de taille n, en 2 sous-tableaux de taille n 2 chacun. Trier chacun de ces 2 sous-tableaux séparément (par appel récursif).
Algorithme de tri par fusion Il s agit d un algorithme de type Diviser pour régner. Idée : Diviser le tableau de taille n, en 2 sous-tableaux de taille n 2 chacun. Trier chacun de ces 2 sous-tableaux séparément (par appel récursif). Interclasser les deux sous-tableaux triés pour obtenir un seul tableau trié.
Pseudo-code 1.10
Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier)
Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion }
Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier;
Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début
Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début Si(d < f ) Alors
Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début Si(d < f ) Alors m := d+f 2 ;
Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début Si(d < f ) Alors m := d+f ; 2 Tri Fusion(a, d, m);
Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début Si(d < f ) Alors m := d+f ; 2 Tri Fusion(a, d, m); Tri Fusion(a, m + 1, f );
Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début Si(d < f ) Alors m := d+f ; 2 Tri Fusion(a, d, m); Tri Fusion(a, m + 1, f ); InterClasser(a, d, f, m);
Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début Si(d < f ) Alors m := d+f ; 2 Tri Fusion(a, d, m); Tri Fusion(a, m + 1, f ); InterClasser(a, d, f, m); FinSi
Pseudo-code 1.10 Fonction Tri Fusion(a : Liste; d, f : Entier) { algorithme de tri par fusion } Var m : Entier; Début Si(d < f ) Alors m := d+f ; 2 Tri Fusion(a, d, m); Tri Fusion(a, m + 1, f ); InterClasser(a, d, f, m); FinSi Fin
Pseudo-code 1.11
Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier)
Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés }
Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier;
Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste;
Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début
Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début Pour i := d à m Faire
Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début Pour i := d à m Faire b[i] := a[i];
Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début Pour i := d à m Faire b[i] := a[i]; FinPour
Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début Pour i := d à m Faire b[i] := a[i]; FinPour Pour i := m + 1 à f Faire
Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début Pour i := d à m Faire b[i] := a[i]; FinPour Pour i := m + 1 à f Faire b[i] := a[f i + m + 1];
Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début Pour i := d à m Faire b[i] := a[i]; FinPour Pour i := m + 1 à f Faire b[i] := a[f i + m + 1]; FinPour
Pseudo-code 1.11 Fonction InterClasser(a : Liste; d, f, m : Entier) { procédure d interclassement des deux sous-tableaux triés } Var i, j, k : Entier; b : Liste; Début Pour i := d à m Faire b[i] := a[i]; FinPour Pour i := m + 1 à f Faire b[i] := a[f i + m + 1]; FinPour
Pseudo-code 1.12
Pseudo-code 1.12 { suite de la procédure d interclassement }
Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d;
Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire
Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors
Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors {a[k] := b[i]; i := i + 1; }
Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors {a[k] := b[i]; i := i + 1; } Sinon
Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors {a[k] := b[i]; i := i + 1; } Sinon {a[k] := b[j]; j := j 1; }
Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors {a[k] := b[i]; i := i + 1; } Sinon {a[k] := b[j]; j := j 1; } FinSi
Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors {a[k] := b[i]; i := i + 1; } Sinon {a[k] := b[j]; j := j 1; } FinSi k := k + 1;
Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors {a[k] := b[i]; i := i + 1; } Sinon {a[k] := b[j]; j := j 1; } FinSi k := k + 1; FinTQ
Pseudo-code 1.12 { suite de la procédure d interclassement } i := d; j := f ; k := d; Tant Que(i j) Faire Si(b[i] < b[j]) Alors {a[k] := b[i]; i := i + 1; } Sinon {a[k] := b[j]; j := j 1; } FinSi k := k + 1; FinTQ Fin
Complexité
Complexité Soit n = f d + 1, la taille du tableau a[d...f ].
Complexité Soit n = f d + 1, la taille du tableau a[d...f ]. Soit C(n) le nombre de comparaisons effectuées par le tri par fusion.
Complexité Soit n = f d + 1, la taille du tableau a[d...f ]. Soit C(n) le nombre de comparaisons effectuées par le tri par fusion. La procédure InterClasser effectue n comparaisons.
Complexité Soit n = f d + 1, la taille du tableau a[d...f ]. Soit C(n) le nombre de comparaisons effectuées par le tri par fusion. La procédure InterClasser effectue n comparaisons. Par conséquent, un coût en Θ(n).
Complexité Soit n = f d + 1, la taille du tableau a[d...f ]. Soit C(n) le nombre de comparaisons effectuées par le tri par fusion. La procédure InterClasser effectue n comparaisons. Par conséquent, un coût en Θ(n). D autre part, C(n) = 2C( n 2 ) + Θ(n).
Complexité Soit n = f d + 1, la taille du tableau a[d...f ]. Soit C(n) le nombre de comparaisons effectuées par le tri par fusion. La procédure InterClasser effectue n comparaisons. Par conséquent, un coût en Θ(n). D autre part, C(n) = 2C( n 2 ) + Θ(n). Ce qui donne : C(n) = Θ(n log 2 n).