sei Tag FETS TK > Unie | Affecte une Gtiquette une fiche
(Attention, une erreur se produit sf-une étiquette
a deja ct affoctée & cette the.)
get tage taak > Ine Teenvoie Tétiquette Tune tache.
{Atiention, une erreur se produit si aucune
Aliquette n'a été affectée A cette tache.)
thas_tag task —> bool Reenvoie veai si Tétiquette de In tache a Gté definie
‘par Ja fonction set_tag ct faux sinon
“Tapue 3 — La table des fonctions complémentaires pour la manipulation des étiquettes & valeurs
centidres des taches.
‘Une tache peut étre ordonnancée seulement si toutes les tches dont elle dépend Vont déja
été, Trouver un ordonnancement d'un geaphe G acyclique avec wn sell Process revient done &
“caumérer les taches de ce graphe dans un ordre (total) qui respecte les contraintes de dependance.
Treat done intéressant d'étiqueter le graphe de taches selon ces contraintes,
Pour manipuler les iquettes A valeurs entigres des taches, on tend la bibliotheque Graph
‘avec les fonctions sur les taches décrites en table 3.
Cot étiquetage fonctionne de la maniére suivante : une tache v regoit uve étiquette tag(v)
portant un numéro strictement supérieur & celui de toutes les Glausltes ‘tag(u) des taches u telles
que 1» v. Notez que plusieurs taches peuvent recevoir Ia meme etiquette.
‘Algorithme 1 (étiquetage par hauteur depuis les racines)-
1. Initialement, aucune tache n'est étiquetée.
. A Vitération d’ordre k = 0, on parcourt ensemble de
aux tiches racines
3. A Vitération k > 0, on parcourt Vensemble des taches en repérant toutes les ‘taches
qui ont pas encore été étiquetées mais dont toutes les tAches prédécesseurs sont déja
‘riquetées. On affecte ensuite & chacune de ces taches l'étiquette k.
4. Llalgorithme termine quand toutes les taches sont étiquetées.
les taches et on affecte l'étiquette 0
On dira d'une téche qui a regu létiquette k qu'elle porte etiquette k.
La figure 3a présente un exemple d’étiquetage selon Valgorithme 1. Les étiquettes sont notées
dans les eercles grisés & droite des taches.
Question 5. Ecrivez une fonction ‘Caml check_tags_ predecessors: task —> bool qui prend en
paramétre une tAche et renvoie urai si toutes ses taches préoesseurs ‘dans le graphe de taches sont
Ptiquetées ct four sinon. En particulier, la fonction renuoic trai st a tache ne dépend d’aucune
tache (c'est une racine).
“Rerivez une fonction, Cam label_height: graph —> unit qui prend en paramdirs 1
hres ef affecte 4 chaque the tne étiquette selon Valgoritme 1. Veils bien @ ce
Js des fonctions de ta bibliotheque Graph.
Question 6.
graphe de tae
quaucune erreur ne puisse se produire lors des ape