2. Implémenter l’algorithme de diffusion présenté à l’Algorithme 1
3. Implémenter un algorithme de comptage centralisé
4. Implémenter deux algorithmes de comptage décentralisé
5. Implémenter un algorithme de maintien d’arbres couvrants
3 Création de l’ordonnanceur
Même si les réétiquetages de graphes représentent des algorithmes distribués, notre implémenta-
tion sera, elle, centralisée : l’ordonnanceur choisit une arête au hasard et la passe à l’algorithme pour
y exécuter une interaction. Puis il recommence sur une autre arête.
Pour commencer nous allons compléter le squelette d’ordonnanceur disponible sur la page du
site (Scheduler.java). Il vous sera utile de savoir qu’il existe une méthode getLinks(). Si vous
voyez les arêtes clignoter une à la fois, vous pouvez passer à l’exercice suivant.
4 Une classe abstraite pour les algorithmes
Récupérez la classe abstraite Algorithm sur la page du cours. Chaque algorithme que vous im-
plémenterez héritera de cette classe. En particulier, elle a trois méthodes abstraites que vous devrez
surcharger. Dans la première (setDefaultState()), vous affecterez au sommet donné l’état ini-
tial de l’algorithme (par exemple, N). Observez que cette méthode est appelée à chaque fois qu’un
sommet est ajouté à la topologie (onNodeAdded()), ainsi que lorsque vous redémarrez l’exécution
(onStart()). Dans la seconde méthode (setDistinguishedState()), vous affecterez au som-
met donné l’état distingué de l’algorithme (s’il y en a un, par exemple I). Observez que cette méthode
est appelée lorsqu’un sommet est sélectionné par l’utilisateur (onSelection()). Prenez le temps de
bien comprendre tous ces enchaînements.
5 Interactions entre ordonnanceur et algorithme
1. Modifiez le constructeur de l’ordonnanceur de sorte à prendre un objet de type Algorithm
en second paramètre. L’ordonnanceur devra appeler la troisième méthode abstraite
applyRule() de cet algorithme lorsqu’une arête est sélectionnée.
2. Implémentez maintenant l’Algorithme 1 dans une classe Diffusion, en surchargeant les trois
méthodes de façon appropriée. Concernant le constructeur, il suffira d’appeler super() avec
la topologie en paramètre. Il est recommandé d’utiliser des couleurs à la place des états Iet
Npour visualiser le résultat plus facilement. Vous pouvez récupérer les sommets extremités
d’une arête en utilisant link.endpoint(0) et link.endpoint(1). Attention, une règle
peut être applicable dans un sens ou dans l’autre (endpoint 0 à gauche ou endpoint 1 à gauche),
il faudra donc tester les deux possibilités si pertinent.
3. Testez votre algorithme en jouant avec la souris et en sélectionnant un sommet distingué (clic
du milieu).
6 Algorithmes de comptage
On s’intéresse maintenant au problème du comptage, où l’un des sommets doit apprendre com-
bien de participants se trouvent dans le réseau. On considère d’abord un algorithme très limité où
Page 2