Département d’Informatique Master Big Data Analytics & Smart Systems Realisé par : Encadré par : Salma Largo Pr.Meknassi Khalid El masry Année universitaire 2016/2017 Table des matières : Table des matières ........................................................................................................................................................... 1 Introduction ...................................................................................................................................................................... 2 Sélection Séquentielle ..................................................................................................................................................... 2 Principe de la méthode .......................................................................................................................................... 2 Pseudo code ............................................................................................................................................................. 3 Jeu d’essai ................................................................................................................................................................ 5 Sélection Parallèle………………………………………………………………………………………………………………………………………………6 Principe de la méthode .......................................................................................................................................... 6 Pseudo code ............................................................................................................................................................. 7 Environnement de travail………………………………………………………………………………………………………………………………..…8 Références…………………………………………………………………………………………………………………………………………………………8 Annexe………………………………………………………………………………………………………………………………………………………………8 LARGO & ELMASRY Page 2 Introduction : En algorithmique, un algorithme de sélection est une méthode ayant pour but de trouver le k-ième plus petit élément d'un ensemble d'objets (étant donné un ordre et un entier k). La question de la sélection est un problème essentiel en algorithmique, notamment dans la recherche du maximum, du minimum et de la médiane. Plusieurs algorithmes ont été proposés et plusieurs contextes ont été étudiés : algorithmes en ligne, complexité amortie, complexité en moyenne, ensemble d'objet particuliers etc. Le problème de la sélection est très lié aux algorithmes de tri : l'un des algorithmes classiques, Quickselect, utilise d'ailleurs le même principe que l'algorithme de tri Quicksort. Dans ce rapport on va essayer d’implémenter 2 algorithmes le premier est un séquentiel de sélection, le deuxième est un algorithme parallèle de sélection. Notre programme va etre développer en langage C en utilisant le Dev C++. 1) Sélection séquentielle : Principe de la méthode : L’algorithme consiste à trouver le k-ième plus petit élement dans une suit d’entier S avec k compris entre 1 et n. on pose n la dimension de S et Q une petite constante. La structure de l’algorithme est la suivante : Si n < Q donc on sort du programme et on retourne le k-ième élement directement. Sinon on divise S on n/Q sous sequences de Q élement. Après on détermine la médiane de chaque sous séquences. On appel la fonction selection_sequentielde manière récursive pour trouver m, la médiane de n/Q médianes trouvées dans l’étape précédente. On va créer 3 sous séquences S1,S2 et S3 d’élements de S inférieur, égale et supérieur de m respictivement. Si le nombre d’élements de S1 est supérieure ou égal à k alors le k-ième élement est nécessairement dans S1. On appel selection_sequentielde manière récursive pour trouver le k-ième élement de S1. Sinon si le nombre d’élements de S1 + le nombre d’élement de S2 est supérieure ou égal à k, On retourne le k-ième élement de S1 Sinon on appel selection_sequentiel de manière récursive pour trouver le 𝑛𝑆2 )-ième élement de S3. LARGO & ELMASRY ( k - 𝑛𝑆1 - Page 3 Pseudo code : /* Fonction qui tri un tableau */ Fonction tri_tableau(Tableau S() en Entier,taille en Entier) en void Variables i,j,elem en Entier Pour i allant de 1 à taille elem <- S(j-1) Pour j allant de i à taille S(j)=S(j-1) S(j)=elem Fin Pour Fin Pour /* Fonction qui calcule la mediane d’un tableau*/ Fonction MedianeTab (Tableau S() en Entier,taille en Entier) en Entier Variable m en Entier Si n%2 = 0 m=n/2 Renvoyer S(m+1) Sinon m=(n+1)/2 Renvoyer S(m) /* Fonction de selection sequentielle*/ Fonction selection_sequentiel (Tableau S() en Entier,k en Entier) en Entier Variables Q,n,tableau tab1(10), tableau tab2(10), tableau tab3(10), tableau tab4(10),i, tableau S1(50), tableau S2(50), tableau S3(10),n1,n2,n3, tableau tab_m(4),M en Entier /* Step 1 */ Si n < Q Tri_tableau(S,n) Renvoyer S(k) Sinon LARGO & ELMASRY Page 4 /* diviser S en plusieurs sous tableaux */ Pour i allant de 0 à 10 Tab1(i)=S(i) Fin Pour Pour i allant de 10 à 20 Tab2(i-10)=S(i) Fin Pour Pour i allant de 20 à 30 Tab3(i-20)=S(i) Fin Pour Pour i allant de 30 à 40 Tab4(i-30)=S(i) Fin Pour /* Step 2 */ Tri_tableau(tab1,10) Tab_m(0)=MedianeTab(tab1,10) Tri_tableau(tab2,10) Tab_m(1)=MedianeTab(tab2,10) Tri_tableau(tab3,10) Tab_m(2)=MedianeTab(tab3,10) Tri_tableau(tab4,10) Tab_m(3)=MedianeTab(tab4,10) /* Step 3 */ Tri_tableau(tab_m,4) M=selection_sequentiel(tab_m,3) /* Step 4 */ LARGO & ELMASRY Page 5 S2(0) = M Pour I allant de 0 à n Si S(i) < M S1(n1)=S(i) n1=n1+1 Sinon Si S(i)>M S3(n3)=S(i) n3=n3+1 FinSi /* Step 5 */ Si n1 >= k Selection_sequentiel(S1,k) Sinon Si n1+n2 >= k Renvoyer M Sinon Selection_sequentiel(S,k-n1-n2) FinSinon Jeu d’essai : On va saisir un tableau de 40 variables de manière aléatoire à l’aide de la fonction rand() et on cherche le 3éme plus petit élement . LARGO & ELMASRY Page 6 2) Sélection parallèle : Principe de la méthode : L’algorithme consiste aussi à trouver le k-ième plus petit élement dans une suit d’entier S avec k compris entre 1 et n en se basant sur les propositions suivants : Définition d’une série d’entiers S contenant n élements et un entier k. L’ordinateur parallèle possède n processeur P1 à PN. Chaque processeur reçoit n et calcul x selon la relation N= 𝑛1−𝑥 . Chaque processeur est capable de stocker 𝑛 𝑥 élements. Chaque processeur est capable d’exécuter la procédure selection_sequentiel. LARGO & ELMASRY Page 7 Soit M un tableau de longueur N situé en mémoire partagée. Pseudo code : Procedure PARALLEL SELECT (S,k) Step 1 : Si n <= 4 alors P1 utilise au maximum 5 comparaisons pour retourner le k-ième élement. Sinon S est subdivisé en 𝑛1−𝑥 sous séries 𝑆𝑖 de longueur 𝑛 𝑥 chacune S[0] S[1] S[2] 𝑆1 S[3] S[4] ……… …….. …….. 𝑆2 S[n] 𝑆𝑛 𝑃𝑖 <- 𝑆𝑖 𝑆𝑖 est affectée au processeur 𝑃𝑖 . FinSi Step 2 : Pour i = 1 à 𝑺𝟏−𝒙 faire en parallèle 𝑃𝑖 obtient la médiane 𝑚𝑖 de 𝑆𝑖 , on fait appel à la fonction selection_sequentiel (𝑆𝑖 ,𝒏𝒊 /𝟐). 𝑃𝑖 stock 𝑚𝑖 dans M(i) M[0] M[1] 𝑚1 𝑚2 M[2] M[3] M[4] ……… …….. …….. M[n] 𝑚𝑛 FinPour Step 3 : On appel la procédure de manière récurssive pour obtenir la médiane m de M PARALLEL SELECT (M, 𝑛𝑚 /2). Step 4 : La série S est subdivisée en 3 sous séquences. LARGO & ELMASRY Page 8 Environnement de travail : Références : Cours Pr.Meknassi (Selection dans un tableau) https://openclassrooms.com/courses/le-tri-par-selection https://en.wikipedia.org/wiki/Selection_algorithm?oldid=628838562 https://fr.wikipedia.org/wiki/Algorithme_de_s%C3%A9lection#Liens_externes Annexe : fonction Code source en langage C trie_tableau MedianeTab LARGO & ELMASRY Page 9 selection_sequentiel LARGO & ELMASRY Page 10 LARGO & ELMASRY Page 11