• Aucun résultat trouvé

TP 6 : Files de priorité

N/A
N/A
Protected

Academic year: 2022

Partager "TP 6 : Files de priorité"

Copied!
3
0
0

Texte intégral

(1)

TP 6 : Files de priorité

Judicaël Courant

Le 7 juin 2016

Le but de ce TP est de réaliser trois implantations différentes de files de priorité et de les utiliser pour implanter un algorithme de tri. Les fichiers mentionnés ici sont disponibles sur le site (http:

//judicael.courant.free.fr/pro).

Pour cela, on se donne une interfacefileprio.mli(voir figure 1) et on définit danstri.mlune fonction de tri qui utilise le modulefileprio(voir figure 2).

1 Préliminaires : utilisation de make

Lire le fichier Makefile (l’ouvrir avec emacs) : il contient toutes les informations utiles à la compilation d’un programme composé de plusieurs fichiers.

2 Implantation par un tableau non trié

Donner une première implantation du module fileprio, c’est-à-dire écrire un fichier fileprio.ml contenant les définitions des fonctions données dans l’interface fileprio.mli (que vous ne devez pas toucher), en respectant les consignes suivantes :

— Une file de priorité est un enregistrement contenant un tableau (vect) de taille fixe, du nombre d’éléments effectivement utilisés dans ce tableau, et de la fonction de comparaison utilisée pour comparer deux-à-deux des éléments.

— Pour tester si une file est vide, il suffit de tester si le nombre d’éléments utilisés est nul.

— Les éléments effectivement utilisés dans le tableau sont en début de tableau.

— Pour insérer un nouvel élément, on le met à la fin de la partie utilisée et on incrémente le champ représentant la longueur utilisée dans le tableau.

— Pour retirer le maximum du tableau, on cherche sa position (dans la partie utilisée), on l’échange avec le dernier élément effectivement utilisé, on décrémente le champ représentant le nombre d’élé- ments utilisés et on renvoie la valeur du maximum.

3 Utilisation pour trier

Utiliser le fichiertri.ml fourni (en ajoutant des jeux de tests) pour vérifier que votre file de priorité fonctionne correctement. Quelle est la complexité de ces fonctions de tri ?

4 Implantation par un tableau trié

Implanter de nouveau le module filepriomais cette fois-ci en respectant les consignes suivantes :

cbaCe document est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International.

1

(2)

TP 6

Le type des files de priorité, paramétré par le type des éléments.

typeα t

cree n c x crée une nouvelle file de priorité de taille maximale n utilisant la fonction de comparaisonc.

x est une valeur de type α inutilisée par la suite mais permettant d’initialiser la structure de données.

value cree :int → (α → α → int) → α → α t ajoute file x ajoute l’élément x dans la file de prioritéfile.

value ajoute : α t → α → unit

retire max file retire l’élément x de priorité maximale dansfile et le retourne.

value retire max : α t → α est vide file vérifie si la file est vide value est vide : α t → bool

Figure1 – Interface fileprio.mli

— Une file de priorité est un enregistrement contenant un tableau (vect) de taille fixe, du nombre d’éléments effectivement utilisés dans ce tableau, et de la fonction de comparaison utilisée pour comparer deux-à-deux des éléments.

— Pour tester si une file est vide, il suffit de tester si le nombre d’éléments utilisés est nul.

— Les éléments effectivement utilisés dans le tableau sont en début de tableau et sont triés par ordre croissant.

— Pour mettre un nouvel élément dans le tableau, on se débrouille pour l’insérer dans le tableau de façon à avoir toujours les éléments utilisés triés par ordre croissant après l’insertion.

— Pour retirer le maximum du tableau, on retourne tout simplement le dernier élément de la partie utilisée (et on décrémente la taille).

5 Utilisation pour trier

Essayer cette nouvelle implantation des files de priorité. Quelle est la complexité de ces fonctions de tri ?

6 Implantation par un tas

Voir la définition destas binaires sur wikipédia et utiliser un tas pour implanterfileprio. Remarquer que l’implantation peut se faire comme précédemment avec un enregistrement contenant un tableau, la taille effectivement utilisée et la fonction de comparaison. (Mais cette fois-ci le tableau sert à représenter un arbre binaire quasi-complet ; voir aussi l’articleArbre binaire, partieMéthode pour stocker des arbres binaires).

7 Utilisation pour trier

Essayer cette nouvelle implantation des files de priorité. Quelle est la complexité de ces fonctions de tri ?

2

(3)

TP 6

trie : α vect → unit

trie t trie le tableau t d’élements par ordre croissant (pour l’ordre naturel pour Caml) en utilisant une file de priorité.

lettrie t =

letn = vect length t in if n 6= 0then

(∗on crée une file de priorité ∗)

let file = fileprio cree n (funx y → compare x y) t.(0) in begin

(∗ on y met tous les éléments det ∗) fori = 0 ton−1 do

fileprio ajoute file t.(i);

done;

(∗ on récupère on récupère les éléments de la file et on les remet danst ∗) fori =n−1 downto 0do

t.(i) ← fileprio retire max file;

done end

trie gen : (α → α → int) → α vect → unit

trie gen c t trie un tableaut d’éléments par ordre croissant pour l’ordre donné par la fonctionc:c x y doit rendre une valeur strictement positive six >y, strictement négative six <y et zéro si x =y. C’est une généralisation immédiate detrie, qui pourrait s’écrire lettrie =funt → tri gen compare t (ou même tout simplementlet trie = tri gen compare).

lettrie gen c t =

letn = vect length t in if n 6= 0then

let file = fileprio cree n (funx y → compare x y) t.(0) in begin

fori = 0 ton−1 do

fileprio ajoute file t.(i);

done;

fori =n−1 downto 0do

t.(i) ← fileprio retire max file;

done end

Figure 2 – Fichier tri.ml

3

Références

Documents relatifs

Cette op´ eration permet de diminuer la cl´ e d’un ´ el´ ement pr´ esent dans la file.. Nous allons donc pr´ esenter ce mod` ele en d´ etail, mais nous commen¸cons par pr´

[r]

— Une file de priorité est un enregistrement contenant un tableau ( vect ) de taille fixe, du nombre d’éléments effecti- vement utilisés dans ce tableau, et de la fonction

⇒ Arbre binaire quasi complet de profondeur n : toutes les feuilles sont de profondeur n ou n-1 ; à la profondeur n-1, les nœuds non feuille sont à gauche (les

[r]

Voici les niveaux de priorité sur les opérateurs du plus fort au plus faible

• Un tas avec clés gère des données avec priorités : – les données sont dans le tableau (ici tas) – les priorités sont dans un deuxième tableau

• La sous-couche p peut contenir au maximum 6 électrons Exemple : Atome de soufre S (Z= 16) 16 électrons à répartir.. Thème 1 : CONSTITUTION ET TRANSFORMATIONS DE LA MATIÈRE