en panne, il restes toujours un chemin de longueur 2entre chaque paire de processus. Chaque processus
peut donc recevoir toutes les valeurs initiales des autres processus en 2 rondes.
On va utiliser l’algorithme suivant. Au début, chaque processus va envoyer sa valeur initiale à tous ses
voisins et il va recevoir les messages sur les liens qui sont pas en panne. À deuxième ronde, il va renvoyer
l’ensemble des valeurs reçues (plus sa propre valeur) vers tous ses voisins. Après la deuxième ronde chaque
processus va décider sur le ET logique de toutes les valeurs qu’il a reçues.
Donc, l’algorithme va décider le même valeur que l’algorithme du partie [A].
La complexité de l’algorithme est de 2rondes de communication.
C. Pour le cas quand il y des omissions de (au plus n/2) messages, on va utiliser un algorithme similaire. Au
début, chaque processus piva envoyer sa valeur initiale à tous ses voisins (tous les n−1autres processus).
S’il y a au plus n/2omissions par ronde, au moins n/2processus connaissent la valeur du processus pi
après la première ronde. À la deuxième ronde, chaque processus va envoyer l’ensemble des valeurs qu’il
a reçues. Donc, après la deuxième ronde, il peut rester au plus un processus qui ne connait pas encore
la valeur du processus pi. Dans ce cas, à la troisième ronde, ce processus va recevoir la valeur de pides
autres n−1processus (un adversaire peut omettre au plus n/2de ces n−1messages). Après 3rondes
de communication, tous les processus vont connaitre toutes les valeurs initiales et donc, les processus
peuvent décider sur la valeur du ET logique de toutes les valeurs.
La complexité de l’algorithme est de 3rondes de communication.
D. Dans le cas où il peut se produire des corruptions de messages, on va envoyer la valeur ‘0’ seulement
dans les rondes paires et la valeur ‘1’ seulement dans les rondes impaires. Donc on va utiliser le même
algorithme que précédemment (voir partie [C]) en utilisant 2fois plus de rondes.
La complexité de l’algorithme est de 2×3 = 6 rondes de communication.
4 Rendez-vous d’agents mobiles avec jeton
A. Chaque agent va poser son jeton au sommet de départ et il va se déplacer dans le sens des aiguilles en
comptant la distance d1jusqu’au prochain jeton. Ensuite il va continuer de se déplacer dans le même sens
en comptant le distance d2jusqu’au sommet suivant qui contient un jeton. Si d1> d2l’agent va s’arrêter
et attendre l’autre agent. Sinon, il va continuer de bouger dans le même sens jusqu’au rendez-vous avec
l’autre agent.
Bien noter que pour un de deux agents d1=dand d2=d0et pour l’autre agent d1=d0and d2=d.
Donc, seulement un des agents va s’arrêter après un tour de l’anneau. L’autre agent va traverser darêtes
de plus et il va arriver au sommet dans lequel le premier agent attend.
La complexité de l’algorithme est de n+d=O(n)rondes.
B. Si d=d0=n/2et l’anneau est orienté, les deux agents vont être dans une situation symétrique au début.
Si un agent bouge dans le sens des aiguilles d’une montre (ou le sens opposé), l’autre agent va bouge
dans le même sens. Donc, la distance entre les deux agents va toujours être égale à n/2. Maintenant si les
agents posent leurs jetons, la distance entre les deux jeton va être également n/2. A partir de ce moment,
les deux agents vont voir la même chose à chaque étape. Si un des deux agents est dans un sommet sans
jeton (respectivement avec jeton) l’autre agent va être dans un autre sommet sans jeton (respectivement
avec jeton). Donc, les deux agents vont toujours effectuer la même action et la distance entre les deux
agents va toujours être égale à n/2. Le rendez-vous est donc impossible dans ce cas.
C. Dans le cas où l’anneau est non-orienté, un agent peut choisir un sens initial et continuer de se déplacer
toujours dans le même sens pour calculer les deux distances d1et d2entre les jetons comme dans
l’algorithme de la partie [A]. On sait que n= (d1+d2)est impair, donc soit d1ou bien d2est impair.
4