Add markdown documentation
This commit is contained in:
parent
3902a833dc
commit
e927349536
2 changed files with 551 additions and 0 deletions
288
doc/tp1.md
Normal file
288
doc/tp1.md
Normal file
|
@ -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 <commande> <parametres_obligatoires> [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 <entier>
|
||||
Nombre de noeuds du fichier d'entree.
|
||||
-s, --size <entier>
|
||||
Taille du filtre
|
||||
-t, --offset <entier>
|
||||
Offset du filtre
|
||||
|
||||
Les parames optionnels sont les suivants:
|
||||
|
||||
-i, --input <fichier>
|
||||
Le fichier d'entree, "-" designant l'entree standard,
|
||||
-o, --output <fichier>
|
||||
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...)
|
||||
|
263
doc/tp2.md
Normal file
263
doc/tp2.md
Normal file
|
@ -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 :
|
||||
<http://glenux2.free.fr/pub/projets/Alobe/archives/>
|
||||
|
||||
### 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 <commande> <parametres_obligatoires> [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 <entier>
|
||||
Nombre de noeuds du fichier d'entree.
|
||||
|
||||
Les parames optionnels sont les suivants:
|
||||
|
||||
-i, --input <fichier>
|
||||
Le fichier d'entree, "-" designant l'entree standard,
|
||||
-o, --output <fichier>
|
||||
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 <entier>
|
||||
Noeur servant de racine a la premiere iteration.
|
||||
-n, --iterations <entier>
|
||||
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...
|
||||
|
||||
|
||||
|
Loading…
Reference in a new issue