Commit f34b3b3a authored by MARRAKCHI Ghassen's avatar MARRAKCHI Ghassen
Browse files

Ajout de rapport

parent 9e81ff00
Pipeline #4668 passed with stage
in 6 seconds
......@@ -12,7 +12,7 @@
/**
Tableau dynamique d'entiers.
Tas Binaire Dynamique.
*/
typedef struct binary_heap_s{
// Pointeur vers la zone de mémoire où les entiers seront stockées.
......
......@@ -12,7 +12,7 @@
/**
Tableau dynamique d'entiers.
Tas Binaire Statique
*/
typedef struct binary_heap_s{
// Pointeur vers la zone de mémoire où les entiers seront stockées.
......
<hr>
<div style="display:flex;align-items:center;flex-direction:column;">
<img src="./institut-Galilee.png"/>
<img src="./Institut-Galilee.png"/>
<h1 style="text-align:center;color:#5b84b3">Structure de Données Avancée</h1>
<span style="color:#c4c1d9"><i>Ghassen <strong>MARRAKCHI</strong></i></span>
</div>
<hr>
<h2 style="text-align:center;color:#7494c4">TP 3</h1>
<h2 style="text-align:center;color:#7494c4">TP 4</h1>
<hr>
<h3 style="color:##7C7C7C"> I- Présentation brève de la structure de données utilisée</h3>
<h3 style="color:##7C7C7C"> Que se passe t-il lorsque l'on ajoute des opérations de suppression? En temps? En mémoire?</h3>
<p>
Un tas binaire est un tableau qui peut être vu comme un arbre binaire comme le montre les images ci-dessous :
</p>
<div style="display:flex;align-items:center;flex-direction:row;">
<img src="./tas-binaire-format-tableau.png" style="width:50px"/>
<img src="./tas-binaire-format-arbre.png" style="width:50px"/>
</div>
<p>
Un tas est caractérisé par sa longueur qui représente sa capacité (le nombre maximal d'élements qu'il peut contenir) et sa taille qui représente le nombre d'élement du tas. Il est dit borné si sa capacité est fixe comme dans notre cas.
</p>
<p>
Un tas en général vérifie un certain nombre de caractéristques:
<ul>
<li>longueur du tas >= taille du tas</li>
<li>parent de l'élement numéro i est à la i/2 ème position</li>
<li>parent de l'élement numéro i est à la 2i ème position</li>
<li>parent de l'élement numéro i est à la 2i + 1 ème position</li>
</ul>
</p>
<p>
Il faut noter qu'il existe deux type de tas, selon la proprieté fondamentale qu'il vérifie :
<ul>
<li>si parent de l'élement numéro i est inférieur au i ème élement, alors le tas est dit minimal.</li>
<li>si parent de l'élement numéro i est supérieur au i ème élement, alors le tas est dit maximal.</li>
</ul>
</p>
<h3 style="color:##7C7C7C"> II- Expériences effectuées</h3>
<p>
Nous avons implémenter un benchmark qui effectue trois expériences différents sur les deux types de tas en même temps :
<ul>
<li>Ajout croissant : on ajoute n élements ordonnés dans l'ordre croissant allant de 1 jusqu'à n.</li>
<li>Ajout décroissant : on ajoute n élements ordonnés dans l'ordre décroissant allant de n jusqu'à 1.</li>
<li>Ajout aléatoire : on ajoute n élements NON-ordonnés compris entre 1 et n.</li>
</ul>
</p>
<h3 style="color:##7C7C7C"> III- Analyse des résultats des experiences</h3>
<h4 style="color:##7C7C7C"> 1- Courbes de temps amorti</h4>
<p>
D'abord, on remarque l'analogie entre les courbes d'ajout croissant et décroissant. Analysons l'exemple des ajouts croissant :<br>
On remarque que le temps amorti pour les ajouts croissants dans un tas minimal est plus grand que celui du tas maximal. Ceci est dù au nombre de swap (permutations) dont la courbe sera analysée dans ce qui suit.
De plus on remarque un caractère asymptotique qui nous rappelle de la complexité temporelle devant être théoriquement O(log n) au pire et au meilleur des cas.
</p>
<p>
Pour le cas d'ajout aléatoire on remarque une NON-régularité dans le tracé de la courbe ce qui est expliquable par les données de permutation. Cependant, on note une corrélation entre les courbes des tas minimal et maximal.
</p>
<h4 style="color:##7C7C7C"> 2- Courbes de mémoire gaspillée</h4>
<p>
Comme expliqué ci-dessus, dans notre cas nous avons implémenté un tas binaire borné. Ainsi, si on ajoute à chaque itération un élement, l'espace de mémoire libre décroit linéairement comme le mettent en évidence toutes les courbes.
L'ajout des des opérations de supression n'a pas affecté les courbes de temps et de permutations. En effet, elles ont gardés presque les même allures. Cependant, les courbes de mémoire acquièrent un allure logarithmique.
</p>
<h4 style="color:##7C7C7C"> 3- Courbes de permutations (SWAP)</h4>
<h3 style="color:##7C7C7C"> La complexité amortie des opérations d’ajout et de suppression/extraction a t-elle changé sur les expériences
utilisant un tableau dynamique ? Pourquoi ?</h3>
<p>
Pour la courbe d'ajout croissant, on remarque que le nombre de swap est croissant pour le tas minimal et totalement absent pour le tas maximal (Aucune permutation n'est effectuée).
Cela est expliquable par le fait que l'ajout croissant vérifie la condition du tas max tel que le i ème élement est supérieur au i+1 ème élement.
Ainsi, chaque élement ajouté à la fin du tableau vérifie la proprieté de tas maximal (le i ème élement est supérieur au parent de celui-ci) à savoir qu'il est supérieur à son parent ce qui ne nécessite aucune permutation.<br>
Pour la courbe d'ajout décroissant, les mêmes caractéristiques sont remarquées avec un raisonnement inversé à savoir que le tas max est celui qui effectue le plus de permutation d'élements.<br>
De plus, on peut remarquer une caractéristique intéressante dans les deux cas à savoir que le nombre de permutations se stabilise pour 2<sup>k</sup> élements ajoutés (2, 4, 8, 16 ..).
Pour les courbes de permutation et de temps, il y a un changement dans les valeurs ; mais les allures des courbes sont restées les même.
</p>
<p>
Pour la courbe aléatoire, la non régularité de la courbe est le resultat attendu. En effet, chaque fois que l'on ajoute un élement, on ne peut pas prédire le nombre de permutation à effectuer.
Cela est du à la dépendance de ce dernier de la position de l'element à ajouter.<br>
De plus, on peut dire que les deux types de tas possèdent le même comportement.
Cependant, pour les courbes de mémoire, les allures ont complétement changé (elles nous rappellent celles des tableau dynamiques).<br>
En effet, ceci est du à la variation continue de la taille du tableau en s'appuyant sur le coefficient ALPHA (la valeur prise est 1,5).
</p>
 %%%%%% TAS STATIQUE %%%%%% 
 %%%%%% TAS STATIQUE %%%%%% 
 _______ Test de la structure 
 Compilation du code de test de la structure en C ... 
gcc -c -o ../__src/static_binary_heap.o ../__src/static_binary_heap.c
gcc -c -o ../__src/analyzer.o ../__src/analyzer.c
gcc -c -o main_statique_test_structure.o main_statique_test_structure.c
gcc -Wall -ansi --pedantic -O3 -o main_statique_test_structure ../__src/static_binary_heap.o ../__src/analyzer.o main_statique_test_structure.o -lm
 Exécution des tests de la structure ... 
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment