Algorithmique distribuée – Examen RICM4, PolyTech’Grenoble Tous documents autorisés Temps imparti : 2 heures Barème indicatif sur 20 points Calcul du nombre de feuilles dans un arbre anonyme Le but global de ce sujet est de découvrir un algorithme distribué permettant de calculer le nombre de feuilles dans le réseau anonyme en arbre. Le sujet est néanmoins découpé en trois exercices que vous pouvez traiter indépendamment les uns des autres. Il s’agit dans le premier exercice d’initialiser le calcul au niveau des feuilles, puis de faire calculer le nombre de feuilles par certains nœuds particularisés par l’algorithme et enfin de propager cette information à travers tout le réseau. Les hypothèses que nous utilisons pour les trois exercices sont les suivantes. Nous supposons que les processus et les canaux sont asynchrones. Les canaux sont FIFO. La topologie du réseau est un arbre avec au moins deux nœuds. Les nœuds ne portent pas d’identité. Par contre chaque nœud, p, porte un étiquetage local de ses canaux : on note δp le degré du nœud p et on suppose que ses canaux sont étiquetés de 1 à δp . Voir l’illustration ci-dessous. A noter : δp est une information connue du nœud et qui pourra être utilisée dans les algorithmes. 2 1 1 1 2 1 3 1 2 3 1 1 3 2 4 1 2 1 1 1 1 Éveiller les feuilles Dans cet exercice, on suppose en plus que certains nœuds vont être activés par une autre application ; on les appelle les nœuds initiateurs pour lesquels la variable booléenne Init sera vraie. On supposera que l’arbre contient au moins un initiateur au début du calcul. On suppose aussi que chaque nœud possède une fonction réveil(). Question 1 (4 points) On veut élaborer un algorithme où chaque feuille exécute la fonction réveil() exactement une fois, en temps fini. Votre solution ne devra pas échanger plus de 2(n − 1) messages où n est le nombre de nœuds du réseau. (a) Écrire un tel algorithme et expliquer son fonctionnement. (b) Justifier la complexité en messages de votre solution. (c) Pourquoi ne peut-on améliorer cette complexité ? 2 Compter les feuilles On suppose maintenant en plus que tous les nœuds sont munis d’un booléen Feuille qui vaut vrai si et seulement si le nœud est une feuille de l’arbre. L’algorithme suivant oriente l’arbre et permet à certains RICM4, PolyTech’Grenoble — 2014 – 2015 APD — 1 nœuds de calculer le nombre de feuilles de l’arbre. Variables pour tout processus p 1: fils ⊆ {1, ..., δp } ensemble de numéros de canaux 2: père, frère ∈ {1, ..., δp } ∪ {⊥} 3: NF entier naturel Algorithme pour tout processus p 4: fils ← ∅, père ← ⊥, frère ← ⊥, NF ← 0 5: Si Feuille alors 6: père ← 1, NF ← 1 7: Envoyer hCPT, NFi à père 8: Fin Si 9: Pour toujours 10: Réceptionner hCPT, f i de q 11: fils ← fils ∪ {q} 12: NF ← NF + f 13: Si |fils| = δp alors 14: frère ← père, père ← ⊥ 15: decide(NF) 16: Sinon 17: Si |fils| = δp − 1 ∧ père = ⊥ alors 18: père ← {1, ..., δp } \ fils 19: Envoyer hCPT, NFi à père 20: Fin Si 21: Fin Si 22: Fin Pour toujours Question 2 (1 point) Exécuter l’algorithme sur l’exemple de l’arbre donné en introduction. (a) Que représente NF ? (b) Combien de nœuds exécutent-ils la fonction decide ? et pour quelle valeur de paramètre ? (c) Comment ces nœuds sont ils positionnés dans l’arbre ? (d) Que représentent les variables père, frère et fils ? On cherche à prouver le bon fonctionnement de cet algorithme. Question 3 (1.5 point) Tout nœud envoie au plus un message CPT. Prouver cette propriété en raisonnant directement sur le code. On cherche à montrer que tout nœud envoie exactement un message CPT. Pour cela, on a besoin d’introduire une nouvelle mesure sur l’arbre qui s’appelle l’excentricité d’un nœud : e(p) représente l’excentricité du nœud p, c’est-à-dire la distance maximum entre p et n’importe quel autre nœud. Question 4 (1 point) Recopier l’arbre donné en illustration et calculer dessus l’excentricité pour chacun des nœuds. Remarquer que (a) Quand l’excentricité est maximum pour un nœud donné, ce nœud est une feuille. Donner un exemple. (b) La réciproque est fausse. Justifier. (c) Pour un processus p donné, p admet au plus un voisin q tel que e(q) ≤ e(p). Donner deux exemples. Ces propriétés sont vraies en général et même si elles se démontrent facilement, nous les admettons dans ce sujet. Vous pourrez les utiliser dans les raisonnements qui viennent. RICM4, PolyTech’Grenoble — 2014 – 2015 APD — 2 Question 5 (4 points) Tout nœud envoie au moins un message CPT. La démonstration va se faire en raisonnant par récurrence sur l’excentricité des nœuds. (a) Cas de base : prouver la proposition pour un processus p tel que e(p) est maximum. (b) Pas de récurrence : on suppose que la propriété est vérifiée pour tout processus q tel que e(q) ≥ k (pour k donné > 0) et on considère un processus p d’excentricité e(p) = k − 1. (i) Que dire si p est une feuille ? (ii) Dans le cas où p n’est pas une feuille, montrer que p a au moins δp − 1 voisins qui ont envoyé un message à leur père. (iii) Terminer la démonstration du pas de récurrence. Vous pourrez raisonner par l’absurde. On peut déduire de cette question que tout nœud a en temps fini un père ou un frère et δp − 1 fils différents de son père ou de son frère. Il est aussi très facile de constater que les liens vers le père constituent le chaı̂nage inverse des liens induits par les fils. Autrement dit, pour deux nœuds voisins p et q, en temps fini, si p est père de q alors q est fils de p. Question 6 (2 points) Exactement deux processus exécutent decide(NF). Montrer cette proposition en comptant le nombre de messages reçus. Indication : utiliser que la somme des degrés d’un graphe est égale à deux fois le nombre d’arêtes. Question 7 (1.5 point) Les deux processus qui exécutent decide(NF) sont voisins. Montrer cette proposition en comptant le nombre de messages envoyés. Question 8 (2 points) Vous venez de montrer que deux processus voisins exécutent decide(NF) en temps fini. Que vaut alors le paramètre NF ? Expliquez pourquoi. 3 Propager le nombre de feuilles On cherche maintenant à écrire un algorithme qui, une fois l’algorithme précédent terminé, va propager le nombre de feuilles calculé à tous les nœuds de l’arbre. On se place sous les mêmes hypothèses que précédemment. En supplément, les nœuds sont munis des variables père, fils, frère, NF qui ont les mêmes types et signification que précédemment. On suppose que les variables sont positionnées de la façon suivante : — Pour exactement deux nœuds voisins, A et B, la variable père vaut ⊥, la variable frère de A vaut B et vice versa, la variable NF contient le nombre de feuilles de l’arbre. — Pour les autres nœuds (différents de A et de B), la variable frère vaut ⊥, les variables père et fils constituent une orientation des arêtes de l’arbre avec pour racine A ou B selon les cas. Question 9 (3 points) Écrire un algorithme qui propage la valeur NF de A et B à tous les nœuds de l’arbre. Combien de messages l’algorithme utilise-t-il ? RICM4, PolyTech’Grenoble — 2014 – 2015 APD — 3