1 / 36

Le tri C’est quoi ? À quoi ça sert ?

Le tri C’est quoi ? À quoi ça sert ?. David Rivreau http://ima.uco.fr. Le tri, c’est quoi ?. Trier consiste à ranger des éléments comparables dans un certain ordre (croissant ou décroissant) Illustration (tableau d’entiers) :. Le tri, à quoi ça sert ?.

cyrah
Télécharger la présentation

Le tri C’est quoi ? À quoi ça sert ?

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Le triC’est quoi ? À quoi ça sert ? David Rivreau http://ima.uco.fr

  2. Le tri, c’est quoi ? Trier consiste à ranger des éléments comparables dans un certain ordre (croissant ou décroissant) Illustration (tableau d’entiers) :

  3. Le tri, à quoi ça sert ? Le tri informatique à de nombreuses applications : • Tri des courriels (ancienneté, expéditeur…) • Tri des résultats d’un moteur de recherche • Tri d’un tableau Excel • Tri des facettes pour l’affichage dans les jeux 3D • Analyse de données massives… Certaines études estiment que le temps CPU consacré à trier des données est de l’ordre de 25%...

  4. Déroulement de la séance Examen d’un problème concret Mise en place d’un algorithme de tri Expérimentation

  5. Partie 1Application du tri pour le bin-packing

  6. Cas d’application (1) Vous gérez une société qui fait de la prestation dans le cadre du Cloud Computing et plus précisément vous offrez des espaces de stockage de données délocalisées (Data as a service). Vos clients sont essentiellement des organisations gouvernementales qui vous confient des archives nécessitant une haute sécurité et une haute disponibilité d’accès. Vous êtes chargé de la proposition commerciale et devez trouver une configuration qui répond au besoin à moindre coût.

  7. Cas d’application (2) Les principales données du problème sont : • L’ensemblede données à stocker regroupées par paquets de tailles prédéfinies • Un ensemble d’espace de stockage de capacités données avec un coût d’utilisation fixe pour chaque espace Vous devez définir quelle taille et quel nombre d’espaces de stockage à utiliser sachant que : • Un ensemble de données ne peut être partagé sur deux stockages • Tous les espaces de stockage utilisés doivent être identiques

  8. Exemple (1) On a un ensemble de 24 ensembles de données : Deux options possibles • Allouer des espaces de 800 To pour 180 k€/an • Allouer des espaces de 210 To pour 60 k€/an Taille des ensembles (en To)

  9. Exemple (2) Remarque • La somme des tailles des ensembles fait 1019 To : si on adopte la première solution, il faudra au moins 2 espaces de 800 To pour 360 k€/an Conséquence • Il est plus économique de choisir l’option 2 s’il est possible de répartir les ensembles sur moins de 5 espaces de stockage de 210 To pour 300 k€/an

  10. Identification du problème Notre problème de stockage est un problème de bin-packing Bin-Packing 1D • Donnée • n objets de poids • un ensemble de boîtes de capacité B • Objectif • Répartir les objets en un nombre minimal de boîtes sans excéder la capacité des boîtes

  11. Applications pratiques (source wikipedia) Pour la version classique en une dimension : • rangement de fichiers sur un support informatique • découpe de câbles • remplissage de camions avec comme seule contrainte le poids Pour la version en deux dimensions : • découpe de matière première • placement de boîtes sur une palette Pour la version en trois dimensions : • rangement d'objets dans des boîtes, un entrepôt, etc...

  12. Nombre de solutions Peut-on examiner Toutes les solutions possibles et choisir la meilleure ? • Algorithme naïf : • on génère Toutes les partitions d’objets • on rejette les partitions qui ne vérifient pas la capacité • on choisit une partition à nombre minimal d’ensemble • Nombre de partitions (nombre de Bell ) • Suite : 1, 1, 2, 5, 15, 52, 203, 877, 4140, 21147, 115975, ….

  13. Nombre de Bell Par exemple : 9.30740105 × 106538 Impossible d’énumérer toutes les solutions possibles en temps raisonnable…

  14. Méthode heuristique First-fit decreasing (FFD) • On trie la liste d'articles par ordre décroissant de taille • On range chaque article dans l'ordre de la liste • L'article courant est placé dans la première boîte qui peut le contenir

  15. Retour sur l’exemple 41 41 Ensemble 10 : 41To 62 112 90 47 86 57 81 56 Ensemble 9 : 41To Espace disponible Ensemble 1 : 112 To Ensemble 5 : 62 To Ensemble 3 : 86 To Ensemble 6 : 57 To Ensemble 2 : 90 To Ensemble 4 : 81 To Ensemble 7 : 56 To Ensemble 8 : 47To On peut tout stocker sur 5 espaces 210 To : c’est la solution la plus économique 112 90 98 To 210 To 8 To 86 81 41 210 To 124 To 43 To 2 To 17 10 12 22 15 2 To 41 To 56 To 29 To 19 To 62 57 56 210 To 148 To 91 To 35 To 33 38 23 24 32 29 29 27 84 To 19 To 101 To 181 To 47 78 To 35 41 125 To 152 To 51 To 122 To 210 To 163 To 0 To 210 To

  16. Performance L’algorithmeFirst Fit Decreasingn'utilise jamais plus de 11/9 OPT + 1 boîtes (où OPT est le nombre de boîtes dans une solution optimale)

  17. Mise en place de l’algorithme de résolution (1) Données en entrée : • Tableau de n tailles d’ensemble : dataSize • Capacité commune des espaces de stockage : storageCapacity Données en sortie • Tableau d’affectation des ensembles aux espaces de stockage : storageAssignment • Tableau des capacités résiduelles des espaces de stockage : storageRemainder • Nombre d’espaces utilisés : nbStorage

  18. Mise en place de l’algorithme de résolution (2) Illustration : • dataSize = [25, 22, 10, 8, 7, 4], storageCapacity = 40 Solution : Données en sortie : • storageAssignment = • storageRemainder= • nbStorage =       Stockage n°0 25 10 4 Stockage n°1 22 8 7 [ ?, ?, ?, ?, ?, ?] [ 0, ?, ?, ?, ?, ?] [ 0, 1, ?, ?, ?, ?] [ 0, 1, 0, ?, ?, ?] [ 0, 1, 0, 0, 1, ?] [ 0, 1, 0, 0, 1, 0] [ 0, 1, 0, 1, ?, ?] [ 0, 1, 0, 0, 1, 0] [15, 18, 40, 40, 40, 40] [5, 10, 40, 40, 40, 40] [15, 40, 40, 40, 40, 40] [5, 18, 40, 40, 40, 40] [5, 3, 40, 40, 40, 40] [1, 3, 40, 40, 40, 40] [1, 3, 40, 40, 40, 40] [40, 40, 40, 40, 40, 40] 2 2 2 1 0

  19. Format des données en entrées Nos jeux de données seront fournis sous forme de texte (directement dans le programme ou dans des fichiers) au format suivant : storageCapacity nbData dataSize Pour l’exemple précédent, on aura : 40 6 25 22 10 8 7 4

  20. Programmation sous Eclipse Nous allons programmer notre algorithme en Java Téléchargez le fichier BinPacking.zip situé sous Documents/Activité Tri de l’espace http://lms.uco.fr/chamilo/courses/BISON Lancez Eclipse, et importez le projet via le menu Import -> ExistingProjectsintoWorkspace -> Select archive file

  21. Contenu du programme On trouve 4 sous-algorithmes dans la classe : • checkSolution : qui permet de vérifier une solution • displaySolution : qui permet d’afficher une solution • nextStorage : qui construit une solution naïve affectant chaque ensemble de données dans un espace de stockage différent • firstFit : que vous devez écrire de façon à traduire l’heuristique first fit que nous avons décrite La méthode main permet de tester les deux jeux de données qui ont servi d’exemple dans les transparents

  22. A vous de jouer ! Vous devez écrire en Java votre algorithme dans firstFit Pour vérifier que votre algorithme est correct, lancez le programme en effectuant Run (via le menu ou Ctrl+F11) Vous devez avoir dans la fenêtre console :

  23. Partie 2Définir un algorithme de tri

  24. Algorithme de tri Jusqu’à présent, nous avons fourni à notre algorithme un tableau préalablement trié « manuellement » Bien évidemment, ce tri manuel n’est possible que pour des petits tableaux Dans cette deuxième partie, nous nous proposons de définir un algorithme de tri

  25. Mise en place d’une stratégie de tri Par groupe de deux, récupérez les carrés de papier et disposez les dans le désordre : Définissez ensemble une stratégie pour trier les carrés en ordre croissant : Restituez la stratégie retenue en français de façon non ambiguë. 13 2 65 62 5 31 42 7 5 19 2 5 5 7 13 19 31 42 62 65

  26. Traduction en algorithme On se place désormais dans le cas d’un tableau contenant des entiers tirés au hasard et dont il faut réordonner les valeurs en ordre croissant. Donner l’algorithme qui correspond à votre stratégie.

  27. Identification de l’algorithme En toute probabilité, vous avez dû définir une stratégie relativement classique (proche d’un algorithme connu). En utilisant l’applet xSortLab du site http://www.kosbie.net/cmu/fall-08/15-100/handouts/xSortLab.html, essayez d’identifier le nom d’usage de votre algorithme. Vous pouvez aussi tenter votre chance avec cette vidéo ou celle-ci.

  28. Programmation de l’algorithme Téléchargez la classe Sorting.java située sous Documents/Activité Tri de l’espace http://lms.uco.fr/chamilo/courses/BISON Glissez-déposez la classe dans le package demo : Complétez le code de sort avec la traduction de votre algorithme

  29. Exécution du tri et performance Exécutez votre code Si tout va bien, vous avez un message du type : Le tableau est correctement trié Temps d'exécution : 1117ms. Les algorithmes de tri ont des performances très variables. Pour s’en convaincre, vous pouvez visiter le site illustratif http://www.iti.fh-flensburg.de/lang/algorithmen/sortieren/sortcontest/sortcontest.htm

  30. Partie 3Intégration du tri pour le bin-packing

  31. Intégration du tri Remplacez la donnée 2 par une version non triée dans BinPacking : // donnée exemple numéro 2 non trié String data2 = "210 " + "24 " + "32 41 56 12 10 47 35 17 15 29 112 62 24 33 81 57 22 90 23 27 86 41 38 29"; Ajoutez le tri en ordre décroissant juste avant l’appel à firstFit: // on trie en ordre croissant dataSize Sorting.sort(dataSize); // on inverse l'ordre for (int i = 0; i < nbData / 2; i++) { inttmp = dataSize[i]; dataSize[i] = dataSize[nbData - 1 - i]; dataSize[nbData- 1 - i] = tmp; } L’exécution du programme doit produire le même résultat

  32. Fichier Le dossier dat du projet Eclipse contient des données de grande taille Vous pouvez tester ces fichiers en procédant comme indiqué à côté :

  33. Pour aller plus loin

  34. Illustration de bin packing 3D Le site ci-dessous permet d’examiner un problème de packing 3D de façon très visuelle : http://www.3dbinpacking.com/

  35. La Recherche Opérationnelle Le bin-packing est un problème classique d’optimisation (recherche opérationnelle). Les 4e années de l’IMA ont réalisé une vidéo pour présenter cette discipline en cours de communication http://vimeo.com/moogaloop.swf?clip_id=56378574

  36. Algorithmes de tri Des transparents de Jorge Mendoza sur les algorithmes de tri sont disponibles dans l’outil Documents/Activité Tri de l’espace http://lms.uco.fr/chamilo/courses/BISON

More Related