AccueilđŸ‡«đŸ‡·Chercher

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.

Exemple d'un calendrier d'une durée de 7 heures (avec des périodes élémentaires d'une heure).
Exemple d'un calendrier d'une durée de 7 heures (avec des périodes élémentaires d'une heure).
Exemple d'un calendrier d'une durée de 7 heures (avec des périodes élémentaires d'une heure)

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.
NƓuds-chapeaux pour une rĂ©servation allant de 1h00 Ă  5h59.
NƓuds-chapeaux pour une rĂ©servation allant de 1h00 Ă  5h59.
NƓuds-chapeaux pour une rĂ©servation allant de 1h00 Ă  5h59

À 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

  1. « Brevet FR2850476 (dans le domaine public depuis 2008) », sur worldwide.espacenet.com (consulté le )
  2. (en) « Method of Managing Resources in a Telecommunication Network or a Computing System », ResearchGate,‎ (lire en ligne, consultĂ© le )
Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplĂ©mentaires peuvent s’appliquer aux fichiers multimĂ©dias.