Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Chapitre 3
Les algorithmes...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Plan
1 Les algorithmes de ...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Recherche s´equentielle
Re...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Recherche s´equentielle
Re...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Recherche s´equentielle
Re...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Recherche s´equentielle
Re...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Recherche s´equentielle
Re...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri par s´election
Tri par...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri par s´election
Tri par...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri par s´election
Tri par...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri par s´election
Tri par...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri par s´election
Tri par...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri par s´election
Tri par...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Prin...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Des ...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Des ...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Des ...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Des ...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Impl...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Impl...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Impl...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Prin...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Des ...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Des ...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Des ...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Impl...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Impl...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Impl...
Les algorithmes de recherche
Les algorithmes de tris classiques
Les algorithmes de tris rapides
Tri rapide
Tri fusion
Impl...
Prochain SlideShare
Chargement dans…5
×

Chapitre 3 Les algorithmes de recherche et de tris

31 vues

Publié le

Ce chapitre est destiné pour les étudiants de deux filières 2ème année LEM/LCMSI. Il traite les algorithmes de recheche et de tris en langage C.

Publié dans : Formation
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
31
Sur SlideShare
0
Issues des intégrations
0
Intégrations
0
Actions
Partages
0
Téléchargements
7
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Chapitre 3 Les algorithmes de recherche et de tris

  1. 1. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Chapitre 3 Les algorithmes de recherche et de tris Module 20: Informatique 3 Algorithmique et programmation C 2´eme ANNEE LICENCE D’ENSEIGNEMENT DE MATHEMATIQUES (LEM) 2´eme ANNEE LICENCE CRYPTO MATHEMATIQUE ET SECURITE DE L’INFORMATION (LCMSI) Texte Texte Texte mlahby@gmail.com 7 novembre 2016 Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 1/ 29
  2. 2. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Plan 1 Les algorithmes de recherche Recherche s´equentielle Recherche dichotomique dans un tableau tri´e 2 Les algorithmes de tris classiques Tri par s´election Tri par bulle Tri par insertion 3 Les algorithmes de tris rapides Tri rapide Tri fusion Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 2/ 29
  3. 3. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Recherche s´equentielle Recherche dichotomique dans un tableau tri´e Recherche s´equentielle Principe de l’algorithme On cherche `a d´eterminer si un tableau contient une certaine valeur. On parcours le tableau ´el´ement par ´el´ement, et on interrompre le parcours d`es que l’´el´ement est trouv´e. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 3/ 29
  4. 4. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Recherche s´equentielle Recherche dichotomique dans un tableau tri´e Recherche s´equentielle Solution 1 int Recherche Seq(int T[],int N, int x) {int i=0 ; while (i<N and T[i] !=x) {i=i+1 ; } if (i<N) return 1 ; else return 0 ; } Solution 2 int Recherche Seq(int T[],int N, int x) {int i=0 ; for (i=0 ;i < N ;i++) if (T[i]==x) return 1 ; return 0 ; } Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 4/ 29
  5. 5. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Recherche s´equentielle Recherche dichotomique dans un tableau tri´e Recherche s´equentielle Complexit´e la complexit´e est O(n) Inconv´enient Cet algorithme est d´econseill´e pour les tableaux tri´es. Un dictionnaire contient de l’ordre de 105 mots Si un test prend 0,01s, une recherche compl`ete prendrait plus de un 1minute 30 s. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 5/ 29
  6. 6. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Recherche s´equentielle Recherche dichotomique dans un tableau tri´e Recherche dichotomique dans un tableau tri´e Principe de l’algorithme la recherche d’un ´el´ement dans un tableau avec la m´ethode de dichotomique requiert un tableau tri´e. On on coupe le tableau en deux par le milieu et on d´etermine si la valeur x doit ˆetre recherch´ee dans la moiti´e gauche ou droite En effet, il suffit pour cela de la comparer avec la valeur centrale. Puis, on r´ep`ete le processus sur la portion s´electionn´ee. . Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 6/ 29
  7. 7. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Recherche s´equentielle Recherche dichotomique dans un tableau tri´e Recherche dichotomique dans un tableau tri´e D´efinition de la fonction int RechDichotomique(int T[],int N, int x) {int g, d, m ; g=0 ; d=N-1 ; while(g<=d) { m=(g+d)/2 ; if (T[m]==x) return 1 ; if (T[m]<x) g=m+1 ; else d=m-1 ; } return 0 ; } Complexit´e la complexit´e de la recherche dichotomique est O(log(n)) Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 7/ 29
  8. 8. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri par s´election Tri par bulle Tri par insertion Tri par s´election Principe Le tri par s´election consiste `a chercher la plus petite valeur de la liste, puis de la mettre `a la derni`ere place en l’´echangeant avec la premi`ere valeur. On r´eit`ere alors le proc´ed´e sur la liste restreinte aux nombres restants et cela jusqu’`a obtenir la liste tri´ee. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 8/ 29
  9. 9. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri par s´election Tri par bulle Tri par insertion Tri par s´election La fonction TriSelection(T,n) void TriSelection(int T[],int n) : {int i,j,Posmin,Tmp ; for(i=0 ;i<n-1 ;i++) { Posmin=i ; for(j=i+1 ;i<n ;i++){ if (T[j]<T[Posmin]) Posmin=j ;} /*****Permutation******/ Tmp=T[i] ; T[i]=T[Posmin] ; T[Posmin]=Tmp ; } } Complexit´e la complexit´e est O(n2) Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 9/ 29
  10. 10. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri par s´election Tri par bulle Tri par insertion Tri par bulle Principe Le principe du tri par bulle consiste `a comparer deux `a deux les ´el´ements e1 et e2 cons´ecutifs d’un tableau et d’effecteur une permutation si e1 > e2. On continue de trier jusqu’`a ce qu’il n’y ait plus de permutation. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 10/ 29
  11. 11. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri par s´election Tri par bulle Tri par insertion Tri par bulle La fonction TriBulle(T,n) void TriBulle(int T[ ],int n) {int i,Tmp,inversion=1 ; while (inversion) { inversion=0 ; for(i=0 ;i<n-1 ;i++) if (T[i]>T[i+1]){ /*****Permutation*****/ Tmp=T[i] ; T[i]=T[i+1] ; T[i+1]=Tmp ; inversion=1 ;} } } Complexit´e la complexit´e est O(n2) Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 11/ 29
  12. 12. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri par s´election Tri par bulle Tri par insertion Tri par insertion Principe Le tri par insertion consiste `a ins´erer le premier ´el´ement `a trier au premier emplacement d’une nouvelle liste, puis on ins`ere chaque nouvel ´el´ement `a sa bonne place dans la liste d`ej`a tri´ee. On r´eit`ere alors le proc´ed´e jusqu’`a avoir replac´e tous les ´el´ements de la liste initiale. (jeu de cartes ou un paquet de copies). Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 12/ 29
  13. 13. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri par s´election Tri par bulle Tri par insertion Tri par insertion La fonction TriInsertion(T,n) void TriInsertion(int T[ ],int n) {int i,j,Tmp ; for(i=0 ;i<n ;i++) { j=i-1 ; while (j>=0 and T[j]>T[j+1]) { /********Permutation********/ Temp=T[j] ; T[j]=T[j+1] ; T[j+1]=Tmp ; j=j-1 ; } } } Complexit´e la complexit´e est O(n2) Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 13/ 29
  14. 14. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Principe de tri rapide D´efinition Le tri rapide (en anglais quicksort) est un algorithme de tri invent´e par C.A.R. Hoare en 1961 et fond´e sur la m´ethode de conception diviser pour r´egner. Il est g´en´eralement utilis´e sur des tableaux, mais peut aussi ˆetre adapt´e aux autres types de donn´ees. Principe de fonctionnement L’algorithme peut s’effectuer r´ecursivement : 1 Le premier ´el´ement de la liste `a trier est appel´e “pivot”. 2 On cr´ee un premier sous-enemble constitu´e des ´el´ements plus petits que le pivot. On les place `a gauche du pivot dans l’ordre o`u ils sont dans la liste `a trier. 3 On cr´ee de la mˆeme fa¸con un deuxi`eme sous-enemble constitu´e des ´el´ements plus grands que le pivot. On les place `a droite de celui-ci dans l’ordre o`u ils apparaissent dans le tableau. 4 On proc`ede de mˆeme, par recursivit´e, sur les deux sous-ensembles jusqu’`a obtenir des sous ensembles d’un seul ´el´ement. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 14/ 29
  15. 15. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Des exemples d’illustration Exemple 1 On va illustrer le tri rapide sur le tableau T=[7,6,3,5,4,2,1]. On choisit comme Pivot une valeur al´eotoire du tableau T. 1. It´eration 1 : Pour trier T[0 :7], on choisit au hasard 4 comme pivot. On place les ´el´ements plus petits que 4, puis 4, puis les autres. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 15/ 29
  16. 16. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Des exemples d’illustration 2. It´eration 2 : Pour trier T[0 :3], on choisit 3 comme pivot. On place les ´el´ements plus petits que 3, puis 3, puis les autres. 3. It´eration 3 : Pour trier T[0 :2], on choisit 2 comme pivot.. On place les ´el´ements plus petits que 2, puis 2, puis les autres. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 16/ 29
  17. 17. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Des exemples d’illustration 4. It´eration 4 : Pour trier T[0 :3], on choisit 3 comme pivot. On place les ´el´ements plus petits que 3, puis 3, puis les autres. 5. It´eration 5 : Pour trier T[0 :2], on choisit 2 comme pivot.. On place les ´el´ements plus petits que 2, puis 2, puis les autres. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 17/ 29
  18. 18. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Des exemples d’illustration Exemple 2 On va illustrer le tri rapide sur le tableau T=[4,6,3,5,7,2,1] (Pivot=T[0]). Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 18/ 29
  19. 19. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Impl´ementation de l’algorithme de tri rapide Tri rapide -Solution- Pour impl´ementer l’algorithme tri rapide on a besoin de programmer quatre fonctions : 1 La fonction Echange(T,i,j) pour ´echanger les ´el´ements T[i] et T[j] d’un tableau T 2 La fonction Partition(T, premier, dernier) prend le tableau T et deux indices premier et dernier en arguments, avec la convention que premier est inclus et dernier exclu. On suppose qu’il y a au moins un ´el´ement dans ce segment, 3 La fonction Tri Rapide Partition(T, premier, dernier) : qui permet de trier une liste T en la partitionnant r´ecursivement en sous listes. 4 La fonction Tri Rapide(T) permettant de trier la liste T en uitlisant l’algorithme tri rapide. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 19/ 29
  20. 20. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Impl´ementation de l’algorithme de tri rapide La fonction Partition(T, premier, dernier) void partition(int T[ ], int premier, int dernier) {int gauche,droite, pivot = T[premier] gauche = premier #On pointe gauche sur l’indice de pivot droite = dernier flag = 0 while (flag == 0){ while (T[droite] >= pivot and droite >= gauche){ droite = droite - 1 ;} if (droite >= gauche){ Echange(T,gauche,droite) ; pivot=T[droite] ;} while (gauche <= droite and T[gauche] <= pivot){ gauche = gauche + 1 ;} if (gauche <= droite){ Echange(T,gauche,droite) ; pivot=T[gauche] ;} if (droite < gauche){#condition d’arrˆet flag = 1 ;} } return droite ;} Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 20/ 29
  21. 21. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Impl´ementation de l’algorithme de tri rapide Tri rapide -Solution- La fonction Echange(T,i,j) void Echange(int T[ ],int i,int j) ............. La fonction Tri Rapide Partition(T) void Tri Rapide Partition(int T[ ], int premier,int dernier){ int m ; if (premier < dernier){ m = partition(T, premier, dernier) ; Tri Rapide Partition(T, premier, m-1) ; Tri Rapide Partition(T, m+1, dernier) ;} } La fonction Tri Rapide(T) void Tri Rapide(int T[ ], int N){ Tri Rapide Partition(T, 0,N-1) ;} Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 21/ 29
  22. 22. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Principe de tri fusion D´efinition Le tri fusion (merge sort) est un des premiers algorithmes invent´es pour trier un tableau car (selon Donald Knuth) il aurait ´et´e propos´e par John von Neuman d`es 1945 ; il constitue un parfait exemple d’algorithme naturellement r´ecursif qui utilise le concept de la programmation diviser pour r´egner. Principe de fonctionnement L’algorithme peut s’effectuer r´ecursivement : 1 On d´ecoupe en deux parties `a peu pr`es ´egales les donn´ees `a trier. 2 On trie les donn´ees de chaque partie. 3 On fusionne les deux parties. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 22/ 29
  23. 23. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Des exemples d’illustration Exemple 1 On va illustrer le tri fusion sur le tableau T=[7,6,3,5,4,2,1,8]. • Pour trier T[0 :8], on trie T[0 :4] et T[4 :8]. • Pour trier T[0 :4], on trie T[0 :2] et T[2 :4]. • Pour trier T[0 :2], on trie T[0 :1] et T[1 :2]. • On fusionne T[0 :1] et T[1 :2]. • Pour trier T[2 :4], on trie T[2 :3] et T[3 :4]. • On fusionne T[0 :1] et T[1 :2] • On fusionne T[0 :2] et T[2 :4]. • Pour trier T[4 :8], on trie T[4 :6] et T[6 :8]. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 23/ 29
  24. 24. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Des exemples d’illustration • Pour trier T[4 :6], on trie T[4 :5] et T[5 :6]. • On fusionne T[4 :5] et T[5 :6] • Pour trier T[6 :8], on trie T[6 :7] et T[7 :8]. • On fusionne T[6 :7] et T[7 :8]. • On fusionne T[4 :6] et T[6 :8]. • On fusionne T[0 :4] et T[4 :8]. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 24/ 29
  25. 25. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Des exemples d’illustration Exemple 2 On va illustrer le tri fusion sur le tableau T=[3,4,6,2,5,1,8,7]. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 25/ 29
  26. 26. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Impl´ementation de l’algorithme de tri fusion Tri fusion -Solution- Pour impl´ementer l’algorithme tri fusion on a besoin de programmer trois fonctions : 1 Une fonction it´erative Fusion(T1,T2,g,m,d) qui prend en arguments deux tableaux, T1 et T2, et les trois indices g, m et d. Les portions a1[g..m[ et a1[m..d[ sont suppos´ees tri´ees. Cette fonction permet d’effectuer la fusion de ces deux portions. 2 La fonction r´ecursive Tri Fusion Rec(T,g, d) prend en arguments les indices g et d d´elimitant la portion `a trier. Si le segment contient au plus un ´el´ement, c’est-`a-dire si g >= d − 1, il n’y a rien `a faire. Sinon, on partage l’intervalle en deux moiti´es ´egales : on calcule l’´el´ement m´edian m, puis on trie r´ecursivement T[g..m[ et T[m..d[. 3 Une fonction Tri Fusion(T) permettant de trier la liste T en uitlisant l’algorithme tri fusion. Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 26/ 29
  27. 27. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Impl´ementation de l’algorithme de tri fusion Tri fusion -Solution- Programme it´eratif Fusion(T1,T2,g,m,d) void Fusion(int T1[ ], int T2[ ], int g, int m, int d) .... .... ..... .... ..... ..... .... ..... ..... .... ..... ..... Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 27/ 29
  28. 28. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Impl´ementation de l’algorithme de tri fusion Tri fusion -Solution- Le code complet :Tri Fusion Rec(T,g,d) void Tri Fusion Rec(int T[ ], int g, int d) .... .... ..... .... ..... ..... .... ..... ..... .... ..... ..... Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 28/ 29
  29. 29. Les algorithmes de recherche Les algorithmes de tris classiques Les algorithmes de tris rapides Tri rapide Tri fusion Impl´ementation de l’algorithme de tri fusion Tri fusion -Solution- Le code complet : Tri Fusion(T) void Tri Fusion(int T[ ], int N) .... .... ..... .... ..... ..... .... ..... ..... .... ..... ..... Module 20: Informatique 3 Algorithmique et programmation C ENS Casablanca 2016-2017 29/ 29

×