INF3105 — Structures de données et algorithmes
Été 2024
UQAM
Département d'informatique

Laboratoire 9 : Monceaux / Files prioritaires

Lectures préalables

Objectifs

Fichiers du lab9

wget http://cria2.uqam.ca/INF3105/lab9/lab9.zip
unzip lab9.zip

Simulation d'un monceau en mémoire

Dessinez la représentation mémoire (pile et tas) d'un monceau après l'insertion (dans cet ordre) des éléments 4, 2, 6, 5, 1, 0, 3.

Implémentation de la classe Monceau

Vous devez compléter l'implémentation de la classe Monceau dans le fichier monceau.h. Vous pouvez utiliser la classe Tableau dans votre implémentation (en substituant le fichier tableau.h fourni par votre implémentation faite au lab3/tp1).
  1. Complétez la fonction bool estVide();.
  2. Complétez la fonction const T& minimum() const;.
  3. Complétez la fonction void inserer(const T&);.
  4. Complétez la fonction void enleverMinimum();.
Une fois l'implémentation terminée, vous pouvez vérifier que tout fonctionne correctement en compilant le programme test_monceau.cpp avec la commande make et en l'exécutant avec la commande ./test_monceau.

Résolution d'un problème: Répartition de députés

Plusieurs pays utilisent une méthode de répartition pour déterminer combien de députés chaque province ou chaque parti (dans le cas d'un système proportionnel) obtiendra. Plusieurs méthodes de répartition existent. Aux États-unis, la constitution (Article 1, Section 2) énonce:
Representatives and direct Taxes shall be apportioned among the several States which may be included within this Union, according to their respective Numbers. [...] The Number of Representatives shall not exceed one for every thirty Thousand, but each State shall have at Least one Representative [...].
La méthode de répartition utilisée par le pays (depuis 1941) respectant les contraintes de la constitution est la méthode d'Huntington-Hill. Cette méthode assigne d'abord un représentant (député) à chaque état, puis répartit les députés restants un à un aux états en fonction de la formule de priorité Q = P/sqrt(n*(n+1)), où: Vous devez compléter le programme huntington.cpp qui lit à partir d'un fichier etats.txt la population de chaque état et qui écrit ensuite sur la sortie standard le nombre de députés que chaque état devrait obtenir selon la méthode d'Huntington-Hill. À noter qu'il y a en tout 435 députés à répartir. Le monceau vu en cours et implémenté plus-haut permet de trouver par défaut la valeur la plus petite, alors qu'on s'intéresse ici en priorité à l'état ayant la métrique la plus élevée pour assigner le prochain député. Plusieurs solutions sont possibles pour résoudre ce problème. Par exemple:

Résolution d'un problème: File d'attente dans un hôpital

On souhaite compléter le programme hopital.cpp qui permet de gérer une file prioritaire de patients. Ce programme lit un fichier qui contient des « requêtes ». Ces requêtes consistent respectivement à : Le matricule et la priorité d'un patient sont simplement des nombres entiers. Comme pour le problème précédent, on souhaite encore une fois obtenir les priorités les plus élevées en premier.