Algorithmique distribuée TD2 Étude de complexité Consignes Travail à rendre par courriel à [email protected] avant la prochaine séance. Plus précisément, il faut envoyer votre code ainsi qu’un petit fichier texte qui explique ce que vous avez fait à chaque étape et les résultats obtenus. La partie “mathématique” n’est pas à rendre, mais je vous demande d’essayer d’y travailler sincèrement au moins 10 minutes. 1 L’algorithme On se propose d’étudier la complexité en temps du dernier algorithme de comptage étudié précédemment. Pour rappel, cet algorithme est à initialisation uniforme : tous les sommets démarrent dans l’état compteur avec la valeur 1, signifiant que chacun s’est déjà lui-même compté. Algorithm 1 Comptage du nombre de sommets (avec compteurs fusionnants et circulants) Etats initiaux : 1 pour tous les sommets. Règle de fusion : i 6= 0 j 6= 0 Règle de circulation : i 6= 0 i+j 0 0 0 i Pour rappel, on considère un ordonnancement aléatoire comme suit. À chaque étape, une arête est sélectionnée au hasard (uniformément). Si la règle de fusion est applicable sur cette arête, elle est appliquée. Sinon, si la règle de circulation est applicable, elle est appliquée. 2 Travail à faire On s’intéresse au temps d’exécution moyen qu’il faut jusqu’à ce qu’il reste un seul compteur. En terme mathématique, on parle d’espérance du nombre d’étapes. On se concentrera ici sur un cas particulier très simple, où le graphe est à la fois statique (il ne change pas) et complet (il existe une arête entre chaque paire de sommet). Bien évidemment, le nombre d’étape dépend du nombre de sommet n dans le réseau. On cherchera donc à analyser son espérance en fonction de n pour émettre une conjecture, par exemple est-ce linéaire en n, est-ce logarithmique, quadratique, cubique, exponentiel ou autre ? 2.1 Analyse expérimentale Nous allons d’abord mener une étude expérimentale pour comprendre l’ordre de grandeur de l’espérance. 1. Adaptez votre code pour mesurer le nombre d’étapes d’une exécution donnée de l’algorithme 2. Concevez un protocole d’expérimentation : combien d’exécution, pour quelles valeurs de n 3. Réalisez vos expérimentations 4. Dessinez vos moyennes avec Gnuplot. Que représentez vous en abscisse et en ordonnée ? Note : si votre courbe n’est pas régulière, c’est qu’il n’y a pas eu assez d’exécutions 5. Tentez de trouver l’équation d’une courbe (un polynôme, donc) qui a la même forme. (Vous pouvez la dessiner en même temps avec la commande replot) 6. Une fois que vous pensez connaître le degré de votre polynôme, utilisez les fonctions de fitting de gnuplot pour trouver les coefficients exacts. Par exemple, si c’est linéaire, alors l’équation est de type ax + b, et dans ce cas le fitting peut vous aider à trouver automatiquement les valeurs de a et b qui s’approchent de plus de votre courbe. (Cherchez des exemples sur internet.) 7. Émettez une hypothèse sur la formule exacte 2.2 Analyse mathématique Tentez maintenant d’analyser la complexité de cette algorithme de façon mathématique et de trouver le résultat exact. Cela est-il cohérent avec votre courbe ? Page 2