Algorithme des nĆuds chapeaux
Lâalgorithme des nĆuds chapeaux est un algorithme de gestion d'un calendrier de ressources. Il a Ă©tĂ© inventĂ© en 2003[1], et amĂ©liorĂ© en 2009[2].
Il est utilisé pour partager une ressource entre un grand nombre d'utilisateurs (par exemple pour réserver de la bande passante dans un réseau télécom, ou de l'espace disque dans un centre de calcul).
Présentation
L'algorithme permet d'effectuer quatre opérations :
- déterminer si une quantité de ressource est disponible sur une période donnée du calendrier,
- réserver une quantité de ressource pour une période donnée,
- supprimer une réservation,
- dĂ©caler le calendrier (le calendrier couvrant une pĂ©riode de temps finie, il doit ĂȘtre rĂ©guliĂšrement dĂ©calĂ© au fur et Ă mesure que le temps passe).
L'intĂ©rĂȘt de l'algorithme est que le temps d'exĂ©cution des 3 premiĂšres opĂ©rations dĂ©pend uniquement de la taille du calendrier (il est indĂ©pendant du nombre de rĂ©servations dĂ©jĂ effectuĂ©es).
Principe
La quantité de ressource à réserver est représentée par un nombre (par exemple un nombre de ko/s sur un lien de réseau).
Le calendrier est mĂ©morisĂ© sous forme d'un arbre binaire dans lequel une feuille reprĂ©sente une pĂ©riode Ă©lĂ©mentaire, et un nĆud interne reprĂ©sente la pĂ©riode constituĂ©e par tous ses descendants.
Pour une rĂ©servation donnĂ©e, on dĂ©finit l'ensemble de ses "nĆuds-chapeaux" qui est l'ensemble minimal de nĆuds reprĂ©sentant la durĂ©e de la rĂ©servation.
Plus prĂ©cisĂ©ment, un nĆud est un "nĆud-chapeau" pour une rĂ©servation si et seulement si :
- toutes ses feuilles descendantes sont contenues dans la durée de la réservation,
et
- c'est le nĆud racine, ou bien au moins une feuille descendante du nĆud pĂšre est en dehors de la rĂ©servation.
Ă chaque nĆud est mĂ©morisĂ©e la quantitĂ© de ressource rĂ©servĂ©e suivante :
q(nĆud) = max (q(fils gauche), q(fils droit)) + somme des quantitĂ©s rĂ©servĂ©es pour les rĂ©servations ayant le nĆud comme nĆud-chapeau
(dans la pratique, pour des raisons d'optimisation, on mémorisera séparément les deux termes de cette somme).
L'enregistrement d'une rĂ©servation revient donc Ă ne mĂ©moriser la quantitĂ© rĂ©servĂ©e que dans ses nĆuds-chapeaux.
Performances
Soit "n" le nombre de pĂ©riodes Ă©lĂ©mentaires du calendrier. On peut remarquer que le nombre de nĆuds-chapeaux pour une rĂ©servation quelconque est infĂ©rieur ou Ă©gal Ă 2.log n, et que la dĂ©termination de ces nĆuds-chapeaux se fait en O(log n).
- Détermination de la quantité de ressource disponible sur une période donnée : O(log n)
- Enregistrement d'une réservation : O(log n)
- Suppression d'une réservation : O(log n)
- DĂ©calage du calendrier : O(log n + M.log n)
oĂč M est le nombre de rĂ©servations actives pendant la pĂ©riode ajoutĂ©e en fin du calendrier.
M est nul si on s'interdit d'enregistrer des réservations au-delà de la durée du calendrier. Si M est important, on planifie en général le décalage du calendrier pendant les périodes creuses d'activité (souvent pendant la nuit).
Procédures
On utilise la notation suivante :
q(nĆud) = qf(nĆud) + qn(nĆud) qf(nĆud) = max (q(fils gauche), q(fils droit)) qn(nĆud) = somme des quantitĂ©s rĂ©servĂ©es pour les rĂ©servations ayant le nĆud comme nĆud-chapeau t0(nĆud) = dĂ©but de la pĂ©riode reprĂ©sentĂ©e par le nĆud t1(nĆud) = fin de la pĂ©riode reprĂ©sentĂ©e par le nĆud t0(resa) = dĂ©but de la pĂ©riode de rĂ©servation t1(resa) = fin de la pĂ©riode de rĂ©servation
Calcul des nĆuds-chapeaux pour une pĂ©riode donnĂ©e
Le nĆud-chapeau le plus Ă gauche (nommĂ© TG) est trouvĂ© en parcourant l'arbre depuis la racine, jusqu'Ă trouver un nĆud tel que t0(nĆud)=t0(resa), et t1(nĆud)ât1(resa)
Le nĆud-chapeau le plus Ă droite (nommĂ© TD) est trouvĂ© d'une maniĂšre similaire.
Les nĆuds-chapeaux intermĂ©diaires sont dĂ©duits en remontant l'arbre Ă partir de ces deux nĆuds-chapeaux TG et TD, jusqu'Ă leur nĆud parent commun :
- pendant la remontĂ©e depuis TG : si un nĆud est tel que t1(nĆud) != t1(dernier nĆud-chapeau parcouru), alors le fils droit de ce nĆud est un nĆud-chapeau,
- pendant la remontĂ©e depuis TD : si un nĆud est tel que t0(nĆud) != t0(dernier nĆud-chapeau parcouru), alors le fils gauche de ce nĆud est un nĆud-chapeau.
Détermination de la quantité de ressource disponible sur une période
La quantité de ressource disponible se déduit de la quantité maximale réservée sur la période.
Pour un nĆud donnĂ©, la quantitĂ© maximale rĂ©servĂ©e sur la pĂ©riode correspondante est Ă©gale Ă
qMax(nĆud) = q(nĆud) + somme des qn() des nĆuds parents jusqu'Ă la racine de l'arbre
La quantitĂ© maximale rĂ©servĂ©e sur une pĂ©riode donnĂ©e est la valeur maximale des qMax() des nĆuds-chapeaux.
Réservation d'une quantité de ressource pour une période donnée
L'enregistrement d'une rĂ©servation s'effectue en ajoutant la quantitĂ© rĂ©servĂ©e au qn() de tous les nĆuds-chapeaux. Le qf() des nĆuds parents doit ĂȘtre mis Ă jour en consĂ©quence.
Suppression d'une réservation
La suppression d'une rĂ©servation s'effectue en retranchant la quantitĂ© prĂ©cĂ©demment rĂ©servĂ©e au qn() de tous les nĆuds-chapeaux. Le qf() des nĆuds parents doit ĂȘtre mis Ă jour en consĂ©quence.
DĂ©calage du calendrier
Le dĂ©calage se fait en retirant des nĆuds Ă gauche de l'arbre et en en ajoutant Ă droite.
Pour chaque sous-arbre supprimĂ© Ă gauche de l'arbre, le qf() de ses nĆuds parents doit ĂȘtre recalculĂ©.
Il faut Ă©galement supprimer et rĂ©enregistrer chaque rĂ©servation active pendant la pĂ©riode ajoutĂ©e au calendrier (s'il y en a). Cette Ă©tape peut Ă©ventuellement ĂȘtre optimisĂ©e en regroupant la suppression/rĂ©enregistrement pour ne modifier que les nĆuds-parents impactĂ©s par le dĂ©calage du calendrier.
Liens externes
Notes et références
- « Brevet FR2850476 (dans le domaine public depuis 2008) », sur worldwide.espacenet.com (consulté le )
- (en) « Method of Managing Resources in a Telecommunication Network or a Computing System », ResearchGate,â (lire en ligne, consultĂ© le )