ioCode
File de priorités
Tas • Exercices 2A
L'objectif de cet exercice est de créer une file de priorités à partir d'un tas min implémenté par un type array. Les éléments de la file sont des enregistrements immuables.
type 'a qdata = {valeur: 'a; priorite: int};;
type 'a file_priorites = {mutable taille: int; tas: 'a qdata array};;
- Écrire une fonction1IndiceUtiliser une variable temporaire pour stocker la première valeur avant de mettre à jour les deux cases du tableau.
echanger : 'a array -> int -> int -> unitqui échange les éléments aux indicesietjdu tableaut. Par exempleechanger [|1; 2; 3|] 0 2renvoie[|3; 2; 1|]. - Écrire une fonction2IndiceComparer la priorité courante avec celle du parent et effectuer une récursion sur l'indice parent si l'échange est requis.
faire_monter : 'a qdata array -> int -> unitqui fait remonter l'élément à l'indicekvers la racine pour respecter la propriété de tas minimum. Par exemplefaire_monter [|{valeur=1; priorite=5}; {valeur=2; priorite=3}|] 1renvoie[|{valeur=2; priorite=3}; {valeur=1; priorite=5}|]. - Écrire une fonction3IndiceIdentifier le fils de priorité minimale puis effectuer une récursion sur son indice tant que la propriété du tas est violée.
faire_descendre : 'a qdata array -> int -> int -> unitqui fait descendre l'élément à l'indicekvers les feuilles pour respecter la propriété de tas minimum. Par exemplefaire_descendre [|{valeur=1; priorite=3}; {valeur=2; priorite=5}; {valeur=3; priorite=4}|] 3 0renvoie[|{valeur=1; priorite=3}; {valeur=3; priorite=4}; {valeur=2; priorite=5}|]. Le premier paramètre entier est la taille de la file et le second l'indicek. - Écrire une fonction4IndiceAllouer un tableau pré-rempli avec
Array.initet initialiser la taille de la structure à zéro.creer_file_priorites : int -> 'a * int -> 'a file_prioritesqui renvoie une file de priorités vide de taillenpré-remplie avec la valeurvet la prioritép. Par exemplecreer_file_priorites 3 (0, 1)renvoie{taille=0; tas=[|{valeur=0; priorite=1}; {valeur=0; priorite=1}; {valeur=0; priorite=1}|]}. - Écrire une fonction5IndicePlacer l'élément à la fin du tableau puis appeler la fonction de remontée avant d'incrémenter la taille logique.
inserer : 'a file_priorites -> 'a * int -> unitqui insère l'élément de valeurvet de prioritépdans la file de prioritéfilep. Par exempleinserer f (10, 2)modifie la file en place et insère l'élément à la bonne place selon la priorité. - Écrire une fonction6IndiceSauvegarder la racine, remplacer son contenu par le dernier élément puis appeler la fonction de descente avant de retourner la valeur sauvegardée.
retirer_minimum : 'a file_priorites -> 'a qdataqui renvoie l'élément de priorité minimale dans la file de prioritéfilep. Par exempleretirer_minimum frenvoie{valeur=42; priorite=1}.
Langage
Console initialisée. En attente de l'interpréteur...