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};;
EXTRAIRE(MIN) - ÉTAPE 1 : RETRAIT DE LA RACINE 5 12 8 15 22 18 45 EXTRAIRE(MIN) - ÉTAPE 2 : REMPLACEMENT A LA RACINE 45 > 8 45 12 8 15 22 18 EXTRAIRE(MIN) - ÉTAPE 3 : TAMISER 8 12 18 15 22 45
  1. Écrire une fonction echanger : 'a array -> int -> int -> unit qui échange les éléments aux indices i et j du tableau t. Par exemple echanger [|1; 2; 3|] 0 2 renvoie [|3; 2; 1|].
  2. Écrire une fonction faire_monter : 'a qdata array -> int -> unit qui fait remonter l'élément à l'indice k vers la racine pour respecter la propriété de tas minimum. Par exemple faire_monter [|{valeur=1; priorite=5}; {valeur=2; priorite=3}|] 1 renvoie [|{valeur=2; priorite=3}; {valeur=1; priorite=5}|].
  3. Écrire une fonction faire_descendre : 'a qdata array -> int -> int -> unit qui fait descendre l'élément à l'indice k vers les feuilles pour respecter la propriété de tas minimum. Par exemple faire_descendre [|{valeur=1; priorite=3}; {valeur=2; priorite=5}; {valeur=3; priorite=4}|] 3 0 renvoie [|{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'indice k.
  4. Écrire une fonction creer_file_priorites : int -> 'a * int -> 'a file_priorites qui renvoie une file de priorités vide de taille n pré-remplie avec la valeur v et la priorité p. Par exemple creer_file_priorites 3 (0, 1) renvoie {taille=0; tas=[|{valeur=0; priorite=1}; {valeur=0; priorite=1}; {valeur=0; priorite=1}|]}.
  5. Écrire une fonction inserer : 'a file_priorites -> 'a * int -> unit qui insère l'élément de valeur v et de priorité p dans la file de priorité filep. Par exemple inserer f (10, 2) modifie la file en place et insère l'élément à la bonne place selon la priorité.
  6. Écrire une fonction retirer_minimum : 'a file_priorites -> 'a qdata qui renvoie l'élément de priorité minimale dans la file de priorité filep. Par exemple retirer_minimum f renvoie {valeur=42; priorite=1}.
Langage
Console initialisée. En attente de l'interpréteur...