TD : Impl´ ementation des ensembles dynamiques.
Olivier Raynaud raynaud@isima.fr http ://www.isima.fr/raynaud
R´esum´e
L’objectif de ce Td est de montrer que le choix d’impl´ementation d’une structure de donn´ees doit ce faire en coh´erence avec la liste d’op´erations envisag´ees pour la manipula- tion des objets cr´e´es. Le premier exercice expose diff´erents besoins de manipulation d’un ensemble dynamique. Le second concerne un ensemble dynamique dont les ´el´ements sont munis d’un indice de priorit´e.
Exercice 1 (Gestion adapt´ee d’un ensemble dynamique).
SoitE un ensemble `an ´el´ements (entiers, chaˆınes de caract`eres ou autre). Dans ce qui suit, on s’int´eressera `a trouver la meilleure impl´ementation (en temps et en espace) possible de E qui autorise un ensemble d’op´erations donn´e.
Question 1. Premier cas :
– eD.rechercher(k) : requˆete qui ´etant donn´e un ensemble dynamique et une valeur k, retourne un pointeur p sur un ´el´ement de l’ensemble dynamique tel que p.element = k, ou N ull si l’´el´ement en question n’est pas dans l’ensemble dynamique ;
Question 2. Deuxi`eme cas :
– eD.rechercher(k) : requˆete qui ´etant donn´e un ensemble dynamique et une valeur k, retourne un pointeur p sur un ´el´ement de l’ensemble dynamique tel que p.element = k, ou N ull si l’´el´ement en question n’est pas dans l’ensemble dynamique ;
– eD.inserer(k) : op´eration de modification qui ajoute `a l’ensemble dynamique un ´el´ement de valeur k;
– eD.supprimer(k) : op´eration de modification qui supprime de l’ensemble dynamique un
´
el´ement de valeur k si un tel ´el´ement existe ; Question 3. Troisi`eme cas :
– eD.minimum() : requˆete qui ´etant donn´e un ensemble dynamique retourne un pointeur sur son ´el´ement minimum ;
– eD.maximum() : requˆete qui ´etant donn´e un ensemble dynamique retourne un pointeur sur son ´el´ement maximum ;
– eD.rechercher(k) : requˆete qui ´etant donn´e un ensemble dynamique et une valeur k, retourne un pointeur p sur un ´el´ement de l’ensemble dynamique tel que p.element = k, ou Null si l’´el´ement en question n’est pas dans l’ensemble dynamique ;
– eD.inserer(k) : op´eration de modification qui ajoute `a l’ensemble dynamique un ´el´ement de valeur k;
– eD.supprimer(k) : op´eration de modification qui supprime de l’ensemble dynamique un
´
el´ement de valeur k si un tel ´el´ement existe ;
– eD.successeur(k) : requˆete qui ´etant donn´e un ensemble dynamique et une valeur de cl´e k, retourne un pointeur p sur l’´el´ement qui suit le premier ´el´ement de cl´e k s’il existe, Null si l’´el´ement n’existe pas ou s’il est d´ej`a maximum ;
– eD.predecesseur(k) : requˆete qui ´etant donn´e un ensemble dynamique et une valeur de cl´e k, retourne un pointeur p sur l’´el´ement qui pr´ec`ede le premier ´el´ement de cl´e k s’il existe, Null si l’´el´ement n’existe pas ou s’il est d´ej`a minimum ;
Question 4. Dire comment le code propos´e doit ˆetre adapt´e pour ˆetre impl´ement´e dans des langages connus.
Exercice 2 (Indice de priorit´e).
SoitE un ensemble `an´el´ements (entiers, chaˆınes de caract`eres ou autre). A chaque ´el´ement est associ´e un compteur initialis´e `a 0. Dans ce qui suit, on s’int´eressera `a trouver la meilleure impl´ementation (en temps et en espace) possible de E qui autorise un ensemble d’op´erations donn´e.
– Ajouter un ´el´ement ayant un compteur ´egal `a 0;
– Supprimer un ´el´ement de compteur minimum dans l’ensemble E;
– Incr´ementer les compteurs de tous les ´el´ements admettant une mˆeme valeur k de comp- teur.
2