TD2 Étude de complexité Consignes Algorithmique distribuée

publicité
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
Téléchargement