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>
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>
<h3style="color:##7C7C7C"> III- Analyse des résultats des experiences</h3>
<h4style="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>
<h4style="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>
<h4style="color:##7C7C7C"> 3- Courbes de permutations (SWAP)</h4>
<h3style="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).