Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
GF-11: Tri Interne Efficace et Tri Externe
Gestion de Fichiers GF-11: Tri Interne Efficace et Tri Externe (Base sur les Sections de Folk, Zoellick & Riccardi, File Structures, An Object-Oriented Approach with C++;)
2
Resume du Cours de cette semaine
Vue Generale Tri interne efficace Heapsort Imbrique Tri de grands Fichiers Tri externe Mergesort Temp d’execution de Mergesort Le cout associe a l’allongement des fichiers Amelioration de la performance de Mergesort Ajout de hardware Ameliorations algorithmiques Imbriquement des operations d’entrée/sortie
3
Vue Generale Ce cours s’interesse a la question du tri efficace, une partie importante du traitement des fichiers. En particulier, il s’interesse au tri efficace dans deux cas: Le cas ou le fichier peut tenir en memoire Le cas ou le fichier est trop grand pour tenir en memoire => Tri externe Les techniques de fusion discutees precedemment sont tres utiles pour le tri de grands fichiers.
4
Une approche efficace pour le triage en memoire interne
Jusqu’a maintenant, le triage consistait a trier un fichier assez petit pour tenir en memoire. On a suppose que: On peut lire le fichier du disque en memoire On peut trier le fichier en utilisant une procedure habituelle. On peut ecrire le fichier trie sur le disque Si le fichier est lu et ecrit de facon aussi efficace que possible et si le meilleur algorithme de triage est utilise, il semblerait que l’on ne peut pas ameliorer cette procedure. Neanmoins, on le peut en faisant les choses en parallele: on peut, en effet, lire et ecrire en meme temps que l’on fait le triage.
5
Imbrication du Traitement et de l’I/O: Heapsort
Heapsort peut etre combinee avec la lecture du disque et l’ecriture sur le disque, de la maniere suivante: Le Heap peut etre construit pendant que le fichier non trie est lu du disque. Le tri peut etre fait pendant que la partie triee du fichier est ecrite sur le disque.
6
Construction du Heap pendant la Lecture du Fichier I
Plutot que de faire un seek a chaque fois que l’on veut un nouvel enregistrement, on peut lire des blocs d’enregistrements en une seule fois dans une memoire tampon et operer sur ce bloc avant de se tourner vers un autre bloc La memoire tampon d’entrée pour chaque nouveau bloc devient une partie de la memoire reservee pour le heap. A chaque fois que l’on lit un nouveau bloc, on l’attache a la fin du Heap courant. Le premier nouvel enregistrement a ajouter est, comme requis par la fonction d’insertion dans le heap, a la fin du tableau contenant le heap. Une fois qu’un enregistrement est inserre, le nouvel enregistrement suivant est a la fin du tableau contenant le heap, de nouveau, pret a etre inserre.
7
Construction du Heap pendant la Lecture du Fichier II
Lire un bloc a la fois plutot qu’un enregistrement a la fois nous permet de sauver du temps de seek, mais cela ne nous permet pas de construire le Heap tout en lisant le fichier. Afin de construire le Heap en meme temps, on a besoin de memoires tampon multiples: tout en traitant les enregistrements d’un bloc, on peut simultanement lire un autre bloc qui sera traite plus tard. Question: Combien de memoires tampon doivent etre utilisees et ou doit on les mettre? Reponse: Le nombre de memoires tampon correspond au nombre de blocs dans le fichier et elles doivent etre localisees en sequence dans le tableau. Note puisque la construction du Heap est plus rapide que la lecture de blocs, il peut y avoir certains delais.
8
HeapSort tout en ecrivant le Fichier Trie sur le disque.
Le plus petit enregistrement du Heap est connu des la premiere etape du HeapSort. Donc, il peut etre mis dans une memoire tampon de sortie jusqu’a ce qu’un bloc entier trie soit determine. Pendant que ce bloc est ecrit sur le disque, un nouveau bloc trie peut etre prepare, etc… Puisqu’a chaque fois qu’un nouveau bloc est ecrit sur le disque, la taille du Heap diminue par un facteur de un bloc, ce bloc peut etre utilise comme memoire tampon. C’a’d qu’on a autant de memoire tampon de sortie qu’il y a de bloc dans le fichier. Puisque tout le I/O est sequentiel, cet algorithme marche aussi bien avec des disques que des bandes magnetiques. De meme, tres peu de seeking est necessaire et la procedure est donc efficace.
9
Une technique efficace pour trier de large fichiers sur disques: Mergesort
Une solution pour le probleme des fichiers qui ne tiennent pas en memoire a deja ete presentee sous la forme de l’algorithme pour triage de cles. Cependant, cet algorithmes a deux insuffisances: Une fois que les cles etaient triees, il etait couteux de chercher (seek) chaque enregistrement en ordre et de les ecrire dans le nouveau fichier trier. Si le fichier contient de nombreux enregistrements, l’indexe lui-meme ne tiendra pas en memoire. Solution: (1) Diviser le fichier en plusieurs sous-fichiers tries (les runs) en utilisant une methode de tri interne; et (2) fusionner toutes les runs Mergesort
10
Avantages du MergeSort
Il peut etre applique a des fichiers de toutes tailles. La lecture de fichier d’entrée pendant l’etape de creation des runs est sequentielle Pas beaucoup de seeking n’est necessaire. La lecture de chaque run pendant la fusion est aussi sequentielle. Le seul seeking necessair est pour aller d’un run a l’autre. Si Heapsort est utilise pour l’etape de tri des runs en memoire, son operation peut etre imbriquee avec celle du I/O. Puisque le I/O est surtout sequentiel, des bandes magnetiques peuvent etre utilisees.
11
Combien de Temps est Necessaire pour un MergeSort?
Supposition de Simplification: Seulement un seek est requis pour chaque acces sequentiel. Seulement un delai de rotation est necessaire par acces. Etapes Couteuses (qui incluent du I/O) de MergeSort: Pendant la Phase de Tri: Lecture de tous les enregistrements dans la memoire pour le tri et la formation des runs. Ecriture des runs triees sur le disque. Pendant la Phase de Fusion: Lecture des runs triees dans la memoire pour la fusion Ecriture du fichier trie sur le disque.
12
Quel Type de I/O prend place pendant les phases de Tri et de Fusion?
Puisque, pendant la phase de tri, les runs sont crees en utilisant heapsort, I/O est sequentiel. Aucune amelioration de performance peut prendre place dans cette phase. Pendant l’etape de lecture de la phase de fusion, il y a beaucoup d’acces au hazard (puisque les memoires tampons contennant les runs differents sont amenees en memoire et effacees de la memoire de maniere impredictible). Le nombre et la taille de la memoire tampon contenant les runs determine le nombre d’acces au hazard. De l’amelioration de performance peut prendre place en cette etape. L’etape d’ecriture de la phase de fusion n’est pas influencee par la facon don’t on organize les runs.
13
Le Cout Associe a l’Allongement des Fichiers
En general, pour une fusion de K runs ou chaque run est aussi large que l’espace libre en memoire, la taille de la memoire tampon pour chacun des runs est de: (1/K)*taille de l’espace memoire=(1/K)*taille de chaque run. Donc K seeks sont requis afin de lire tous les enregistrements dans chacun des runs individuels et puisqu’il y a k runs en tout, l’operation de fusion requiert K2 seeks. Puisque K est directement proportionnel a N, le nombre d’enregistrements, MergeSort est une operation d’ordre O(N2) comptee en nombre de seeks.
14
Que Peut etre fait pour Ameliorer la Performance de MergeSort?
La performance de MergeSort peut etre amelioree de plusieures facons: On peut allouer plus de hardware tel que des unites de disque, de la memoire ou des chaines I/O. On peut performer la fusion en plus d’une etape, en reduisant l’ordre de chaque fusion et augmentant la taille de la memoire tampon pour chaque run. On peut augmenter la longueur des runs tries initial, algorithmiquement. On peut trouver des facons d’imbriquer les operations I/O.
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.