From e927349536f10c94f9389e789d1c161022f5265b Mon Sep 17 00:00:00 2001 From: "Glenn Y. Rolland" Date: Mon, 18 May 2020 01:51:51 +0200 Subject: [PATCH] Add markdown documentation --- doc/tp1.md | 288 +++++++++++++++++++++++++++++++++++++++++++++++++++++ doc/tp2.md | 263 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 551 insertions(+) create mode 100644 doc/tp1.md create mode 100644 doc/tp2.md diff --git a/doc/tp1.md b/doc/tp1.md new file mode 100644 index 0000000..cd95dd1 --- /dev/null +++ b/doc/tp1.md @@ -0,0 +1,288 @@ +# Alobe + +## Description + +Alobé est un logiciel libres permettant de manipuler de grands graphes non-orientes décrits par la liste de leurs arrêtes. Il possède les +caractéristiques suivantes : + + * Il est distribue sous la licence [GNU General Public License](http://www.gnu.org/copyleft/gpl.html) + * Il est ecrit en C (bien qu’écrit au départ en C++, comme en témoigne le dépôt subversion) et possède une interface en ligne de commande, + * Il implémente le filtrage du graphe pour l'extraction d'un sous-ensemble (exercice 2). + * Il implémente le calcul des degrés (exercice 3) + * Il implémente les statistiques sur le calcul des degrés (degré moyen, degré maximum, densité du graphe) (exercice 5) + * Il implémente le stockage des données de façon contiguë en mémoire (en un unique tableau) (exercice 4). + * Il implémente le calcul des composantes connexes de façon efficace (exercice 5). + * Il implémente une méthode de calcul alternatif des composantes connexes (exercice 6 - defi). + +### Auteurs + +Alobe a ete entierement realise par Glenn ROLLAND +<[glenux@fr.st](mailto:glenux@fr.st)> a l'occasion de travaux pratiques du +cours de Grand Reseaux du Master 2 Ingenierie Informatique \- Systemes, +Reseaux et Internet. + +## Pre-requis + +Alobé ne nécessite pas de bibliothèques de fonctions particulières pour +fonctionner. + +## Se procurer Alobe + +Vous pouvez recharger la dernière archive des sources, ou bien directement +la version la plus récente du projet sur le dépôt Subversion du projet. + +## 4. Utiliser Alobe + +### 4.1. Compilation + +Commencez par decompressez l'archive. + + $ tar -xzvf alobe-0.1.tar.gz + +Rendez vous ensuite dans le dossier qui vient d'etre cree lors de la +decompression. + + $ cd alobe-0.1 + +Puis lancez l'auto-configuration du logiciel, puis la compilation. + + $ ./autogen + $ ./configure + $ make + +Le binaire produits se trouve dans le dossier `src/alobe` + + +### 4.2. Utilisation + +Les binaires de Alobe doivent etre appeles avec la syntaxe suivante: + + Usage: alobe [options] + +Les commandes sont les suivants: + + -F, --filter + Filtrage du fichier d'entree pour extraire un sous-graphe. + -D, --degree + Calcul du degre des noeuds du graphe pris en entree. + -S, --store + Stockage et remplissage du tableau representant le graphe en memoire. + -A, --average + Calcul des statistiques sur les noeuds du graphe d'entree (degre moyen, degre max, densite). + -C, --connexity + Calcul des composantes connexes par la methode du tableau unique. + -E, --defi + Calcul des composantes connexes par ensembles d'intervalles de noeuds. + +Les parametres obligatoires sont les suivants: + + -c, --count + Nombre de noeuds du fichier d'entree. + -s, --size + Taille du filtre + -t, --offset + Offset du filtre + +Les parames optionnels sont les suivants: + + -i, --input + Le fichier d'entree, "-" designant l'entree standard, + -o, --output + Le fichier de sorftie, "-" designant la sortie standard. + -v, --verbose + Passe l'affichage en mode verbeux.e numero du noeud a lire et afficher a partir du fichier compresse + +## 5. Documentation + +### 5.1. Code + +Vous pouvez trouver la documentation de Alobe dans le dossier doc/html de +l'application, ou en suivant [ce lien](html/index.html). + +### 5.2. Remarques sur les differents exercices + +#### 5.2.1. Exercice 1 + + + +#### 5.2.2. Exercice 2 + +Il est possible de filtrer le graphe d'entree pour extraire un sous ensemble +de noeuds de la façon suivante : + + ./src/alobe -F -t 0 -s 30 -i ../web.data.gz -c 701654 + +Ce qui produit en sortie + + Command -> FILTER + Offset -> 0 + Size -> 30 + Input Data -> ../web.data.gz + Input Index -> 701654 + Filtering between [ 0 .. 30 ]... + 0 1 + 0 2 + 1 3 + 1 4 + 1 5 + 1 6 + 1 7 + 1 8 + 1 9 + 1 10 + 1 11 + 1 12 + + [...] + +( uniquement les noeuds x compris entre 0 <= x < 30 ) + +#### 5.2.3. Exercice 3 + +Le calcul du degré des noeuds se fait par la commande suivante : + + ./src/alobe -D -i ../web.data.gz -c 701654 + +Ce qui produit (en premiere colone l'index du noeud et en seconde le degre): + + Command -> DEGREE + Input Data -> ../web.data.gz + Input Index -> 701654 + Computing degree of each node... + done + 0 2 + 1 1194 + 2 77 + 3 496 + 4 227 + 5 339 + 6 337 + 7 340 + 8 337 + 9 10 + 10 16 + 11 31 + 12 15 + 13 22 + + [...] + +Le calcul du degre est effectue dans un tableau de sizeof(long) * N (ou N est +le nombre de noeuds), initialise a zero, et ou les valeurs des cases sont +incrementees a la lecture des arcs. + +#### 5.2.4. Exercice 4 + +Le simple stockage du graphe en mémoire ne produit pas de sortie visible, mais +s’exécute en tapant : + + ./src/alobe -S -i ../web.data.gz -c 701654 + +Le programme commence par calculer les degres, puis initialise un tableau de +taille N (N = nombre de noeuds) pointeurs vers les cases d'un tableau de +taille (M + 3) * sizeof(long) (ou M est la somme des degres des noeuds) +destine a contenir les arcs de chaque noeud. Les 3 cases supplementaires ne +servent qu'au calcul des composates connexes et seront decrites plus loin. + +#### 5.2.5. Exercice 5 + +Le calcul des statistiques sur les noeuds du graphe se fait de la façon +suivante: + + ./src/alobe -A -i ../web.data.gz -c 701654 + + Command -> AVERAGE + Input Data -> ../web.data.gz + Input Index -> 701654 + Computing degree of each node... + done + Degree average: 5.517015 + Degree maximum: 5331 + Density : 0.000000 + +Cet exercice reutilise la structure de donnees l'exercice 3, et en la +parcourant effectue le calcul. + +#### 5.2.6. Exercice 6 + +Le calcul des composantes connexes se fait de la façon suivante : + + ./src/alobe -C -i ../web.data.gz -c 701654 + + Command -> CONNEXITY + Input Data -> ../web.data.gz + Input Index -> 701654 + Computing degree of each node... + done + Filling the Big Table... + done + Found connex component at 0 + Found connex component at 9484 + Found connex component at 15516 + Found connex component at 17477 + Found connex component at 20073 + Found connex component at 20100 + + [...] + + Found connex component at 699413 + Found connex component at 700568 + Found connex component at 701306 + Found connex component at 701313 + Found 970 connex components + +Pour le fichier IP.data.gz on obtient : + + Command -> CONNEXITY + Input Data -> /home/warbrain/Films/IP.data.gz + Input Index -> 467273 + Computing degree of each node... + done + Filling the Big Table... + done + Found connex component at 0 + Found connex component at 324896 + Found 2 connex components + +Et pour le fichier P2P.data.gz les machines a ma disposition ne possedaient +pas suffisament de memoire... + +Le calcul des composantes connexes utilise le meme tableau que l'exercice 4. +Le calcul se fait dans les 3 cases supplementaires : + + * une case pour le degre du noeud + * une case pour l'offset du noeud traite + * une case pour le noeud "pere" dans le parcours en profondeur. + +Lorsqu'on parcours un noeud x en provenance de y, on inscrit la reference du +noeud pere dans la case 3, puis pour chaque noeud adjacent non visite, on +indique le noeud adjacent parcouru actuellement puis on parcourt recursivement +le noeud adjacent. + +Remarque: jusque la le TP etait programme en C++, et pour un eventeuel gain de +performances il fut reecrit entierement (en conservant les structures de +donnees) en C. Cependant seules 0.3 secondes furent gagnees sur le graphe +web.data.gz... sur un temps de calcul total de 14 sec... (sur un iBook G4 1Ghz +avec 256 Mo de RAM sous GNU/Linux). + +#### 5.2.7. Defi + +On suppose que dans le graphe du web, les noeud adjacents ont de fortes +chances d'appartenir a la même composante connexe. + +Ainsi, pour décrire en mémoire une composante regroupant les nœuds {0, 1, 2 +,3 ,4, 5, 6, 7, 8, 9, 10, 14,15,16, 17, 19, 20} nul besoin de stocker en +mémoire autre chose que les ensembles d'intervalles suivants: [0 .. 10] U [14 +.. 17] U [19 .. 20] ... + +Cependant, les fusions d'ensembles nécessitent de nombreuses recopies de +données et d'allocations de mémoire. L'algorithme s'en trouve par conséquent +fort ralenti... + +On peut lancer le défi en tapant : + + ./src/alobe -E -i ../web.data.gz -c 701654 + +..et admirer les résultats (s'il apparaissent, car il y a encore pas mal de +soucis de pointeurs se baladant librement...) + diff --git a/doc/tp2.md b/doc/tp2.md new file mode 100644 index 0000000..a830905 --- /dev/null +++ b/doc/tp2.md @@ -0,0 +1,263 @@ +# Alobe (TP2) + +## 1\. Description + +Alobe est un logiciel libre permettant de manipuler de grands graphes non- +orientes decrits par la liste de leurs arretes. Il possede les +caracteristiques suivantes : + + * Il est distribue sous la licence [GNU General Public License](http://www.gnu.org/copyleft/gpl.html) + * Il est ecrit en C (bien qu'ecrit au depart en C++, comme en temoigne le depot subversion) et possede une interface en ligne de commande, + * Il implemente le calcul de la distance d'un noeud a tous les autres (exercice 1). + * Il fournit en sortie des donnees permettant de tracer la distribution des distance a un noeud donne (exercice 2) + * Il fournit en sortie les donnees permettant de tracer l'evolution de l'estimation de la distance moyenne en fonction du nombre de parcours effectues. (exercice 3) + * Il implemente le calcul de la borne inferieure du diametre, en prenant la distance maximale d'un noeud donne a tous les autres (exercice 4). + * Il implemente le calcul de la borne superieure du diametre, en prenant la distance maximale dans l'arbre du parcours en largeur (exercice 5). + * Il fournit en sortie des donnees permettant de tracer les courbes des meilleurs bornes inferieures et superieure en fonction du nombre de parcours effectues. (exercice 6 - defi). + +### 1.1. Auteurs + +Alobe a ete entierement realise par Glenn ROLLAND +<[glenux@fr.st](mailto:glenux@fr.st)> a l'occasion de travaux pratiques du +cours de Grand Reseaux du Master 2 Ingenierie Informatique \- Systemes, +Reseaux et Internet. + +## 2\. Pre-requis + +Alobe ne necessite pas de bibliotheques de fonctions particulieres pour +fonctionnner. + +## 3\. Se procurer Alobe + +Vous pouvez telecharger la derniere archive des sources, ou bien directement +la version la plus recente du projet sur le depot Subversion du projet. + +### 3.1. L'archive des sources + +Elle est disponible a l'adresse : + + +### 3.2. Le depot Subversion + +Afin d'obtenir les sources les plus a jour, vous pouvez utiliser le logiciel +de controle de sources Subversion + +$ svn checkout http://repository.glenux.ath.cx/svn/Cours/M2/Grand_Reseaux/TP1/ + +Il n'y a pas de mot de passe, il suffit donc de presser la touche "Entree" +pour l'utilisateur "anonymous", si ce dernier vous est demande. + +## 4\. Utiliser Alobe + +### 4.1. Compilation + +Commencez par decompressez l'archive. + +$ tar -xzvf alobe-0.2.tar.gz + +Rendez vous ensuite dans le dossier qui vient d'etre cree lors de la +decompression. + +$ cd alobe-0.2 + +Puis lancez l'auto-configuration du logiciel, puis la compilation. + +$ ./autogen +$ ./configure +$ make + +Le binaire produits se trouve dans le dossier : + + * src/alobe + +### 4.2. Utilisation + +Les binaires de Alobe doivent etre appeles avec la syntaxe suivante: + +Usage: alobe [options] + +Les commandes sont les suivants: + +-I, --tp2distance + Calcule les distances a partir du noeud donne. +-J, --tp2distanceplot + Donne la distribution des distances a partir du noeud donne. +-L, --tp2distevolution + Donne l'evolution de l'estimation de la distance moyenne.pour un noeud donne, ou au hasard, en fonction du nombre d'iterations. +-M, --tp2limitinf + Calcule la borne inferieure du diametre pour un noeud donne ou au hasard, en fonction du nombre d'iterations. +-N, --tp2limitsup + Calcule la borne superieure du diametre pour un noeud donne ou au hasard, en fonction du nombre d'iterations. +-O, --tp2defi + Fournit les donnees permettant de tracer les courbes de meilleures bornes inferieures et superieures du diametre en fonction du nombre d'iteration. + +Les parametres obligatoires sont les suivants: + +-c, --count + Nombre de noeuds du fichier d'entree. + +Les parames optionnels sont les suivants: + +-i, --input + Le fichier d'entree, "-" designant l'entree standard, +-o, --output + Le fichier de sorftie, "-" designant la sortie standard. +-v, --verbose + Passe l'affichage en mode verbeux.e numero du noeud a lire et afficher a partir du fichier compresse +-r, --root + Noeur servant de racine a la premiere iteration. +-n, --iterations + Nombre d'iterations a effectuer. + +## 5\. Documentation + +### 5.1. Code + +Vous pouvez trouver la documentation de Alobe dans le dossier doc/html de +l'application, ou en suivant [ce lien](html/index.html). + +### 5.2. Remarques sur les differents exercices + +#### 5.2.1. Exercice 1 + +On calcule la distance d'un noeud (le 24 par exemple) a tous les autres, ainsi +que la moyenne de toutes ses distances, par la commande suivante: + + ./alobe -I -i web.data.gz -o result.txt -c 701654 -r 24 + +Ce qui produit le fichier result.txt suivant : + +Maximum distance : 1 +Average distance : 0.666667 + +#### 5.2.2. Exercice 2 + +On obtient la distribution des distances pour un noeud donne (le 24 par +exemple) de la façon suivante: + +$ ./alobe -J -i web.data.gz -o result.txt -c 701654 -r 24 + +Ce qui produit en sortie + +0 1 +1 336 +2 3017 +3 21100 +4 89398 +5 146225 +6 145567 +7 118491 +8 77830 +9 47189 +10 21247 +11 8628 +12 1550 +13 532 +14 112 +15 7 +16 4 + +Soit le graphique suivant : +![exercice 2 plot](exercice2.png) + +#### 5.2.3. Exercice 3 + +On trace l'evolution de l'estimation de la distance moyenne (en fonction du +nombre d'iteration) par la commande suivante: + + ./alobe -L -i web.data.gz -o result.txt -c 701654 -n 100 -r 24 + +Ce qui produit en sortie: + +0 6.228710 +1 7.560919 +2 9.514071 +3 9.537433 +4 9.504442 +5 9.567365 +6 9.542382 +7 9.429151 +8 9.426282 +9 9.566440 +10 9.583777 +11 9.450484 +12 9.548250 +13 9.503499 +14 9.508191 +15 9.475249 +16 9.297400 +17 9.210398 +[...] + +Soit sous forme graphique : +![exo 3 plot](exercice3.png) + + + +#### 5.2.4. Exercice 4 + +Pour calculer la borne inferieure, on fera: + +./alobe -M -i web.data.gz -o result.txt -c 701654 -n 5 -r 24 + +Iteration 0 \-- choosing root 24 + \-- borne inferieure 17 +Iteration 1 -- choosing root 60401 + \-- borne inferieure 18 +Iteration 2 -- choosing root 700018 + \-- borne inferieure 24 +Iteration 3 -- choosing root 77852 + \-- borne inferieure 24 +Iteration 4 -- choosing root 45944 + \-- borne inferieure 24 + + + +#### 5.2.5. Exercice 5 + +Pour le calcul de la borne superieure, on fait : + +./alobe -N -i ~/web.data.gz -o result.txt -c 701654 -n 10 -r 24 + +Iteration 0 \-- choosing root 24 + \-- borne superieure 33 +Iteration 1 -- choosing root 96542 + \-- borne superieure 33 +Iteration 2 -- choosing root 49208 + \-- borne superieure 33 +Iteration 3 -- choosing root 436498 + \-- borne superieure 33 +Iteration 4 -- choosing root 309990 + \-- borne superieure 32 +Iteration 5 -- choosing root 538890 + \-- borne superieure 32 +Iteration 6 -- choosing root 266656 + \-- borne superieure 32 +Iteration 7 -- choosing root 529998 + \-- borne superieure 32 +Iteration 8 -- choosing root 140145 + \-- borne superieure 32 +Iteration 9 -- choosing root 640316 + \-- borne superieure 32 + + +#### 5.2.6. Exercice 6 - Defi + +Le cumul des courbes precedentes se fait par : + +$ ./alobe -O -i web.data.gz -o result.txt -c 701654 -n 100 -r 24 + +Puis : + +$ ./defiplot.sh result.txt + +Pour obtenir : ![defi plot](defi.png) + +Remarque: pour le defi, il aurait fallu en plus utiliser une heuristique de +choix des noeuds permettant de faire converger les deux courbes bornant le +diametre au plus vite. Par exemple, choisir les noeuds par degre decroissant +dans la composante connexe, en supposant qu'un noeud a fort degre comme racine +donne un arbre plus plat et donc la borne supperieure par la meme occasion... + + +