GitLab now enforces expiry dates on tokens that originally had no set expiration date. Those tokens were given an expiration date of one year later. Please review your personal access tokens, project access tokens, and group access tokens to ensure you are aware of upcoming expirations. Administrators of GitLab can find more information on how to identify and mitigate interruption in our documentation.
@@ -8,27 +8,21 @@ Participants: CHAUVIN Ewan, EHLES Ivan
Description du Problème:
C’est la comparaison des performances de différentes structures de données et différentes implantations, pour différentes opérations,
en termes de consommation CPU et de consommation mémoire. Dans notre cas, l'objectif sera donc de comparer les performances de différentes opérations pour différentes
implémentations de l'interface List.
C’est la comparaison des performances de différentes structures de données et différentes implantations, pour différentes opérations, en termes de consommation CPU et de consommation mémoire. Dans notre cas, l'objectif sera donc de comparer les performances de différentes opérations pour différentes implémentations de l'interface List.
Description de tous les paramètres exploratoires du problème:
Les paramètres modifiables seront:
- Le choix de la structure
- Le choix de l'opération à éxecuter
- Le nombre de répétion de l'opération choisi
- Le choix de l'opération à exécuter
- Le nombre de répétions de l'opération choisi
- La taille de la structure
## Dispositif expérimental
Plan de travail:
Tout d'abord, l'objectif sera de faire de simples comparaisons sur les temps d'exécutions (et ressources utilisées) des
opérations entre deux implémentations de l'interface List. Nous prendrons ici les classes ArrayList et LinkedList et travaillerons en Java.
Suite à cela, nous créerons notre propre implémentation de List, nottament une classe qui reprendra le concept de tableau.
L'implémentation de l'interface List pour une classe utilisant un tableau peut, à première vue, sembler étrange,
mais cela nous permettra de tester cette classe de la même manière que toutes les autres, et ce, de manière simplifiée.
Tout d'abord, l'objectif sera de faire de simples comparaisons sur les temps d'exécutions (et ressources utilisées) des opérations entre deux implémentations de l'interface List. Nous prendrons ici les classes ArrayList et LinkedList et travaillerons en Java. Suite à cela, nous créerons notre propre implémentation de List, notamment une classe qui reprendra le concept de tableau. L'implémentation de l'interface List pour une classe utilisant un tableau peut, à première vue, sembler étrange, mais cela nous permettra de tester cette classe de la même manière que toutes les autres, et ce, de manière simplifiée.
### Organisation objet
...
...
@@ -55,7 +49,7 @@ Note importante:
Description de la plateforme de test
La plateforme utilisé pour générer nos données est le bureau à distance (sous Unix)
La plateforme utilisée pour générer nos données est le bureau à distance (sous Unix)
```
...
...
@@ -72,10 +66,9 @@ Cache L3 : 25600K
### Description de la démarche systématique
Description de la démarche systématique et de l'espace d'exploration pour chaque paramètres:
Description de la démarche systématique et de l'espace d'exploration pour chaque paramètre:
Afin d'obtenir les données nécessaires à la génération des graphiques, il est nécessaire de generer un
fichier de valeur (.csv), que l'on obtient en éxecutant un scrpit, prenant en paramètre simplement le nombre de répétitions des opérations
Afin d'obtenir les données nécessaires à la génération des graphiques, il est nécessaire de générer un fichier de valeur (.csv), que l'on obtient en exécutant un script, prenant en paramètre simplement le nombre de répétitions des opérations
Script utilisé:
```sh
...
...
@@ -116,8 +109,7 @@ done
### Analyse des résultats préalables
Au niveau de la consomation de mémoire ainsi que du temps d'éxecution, on constate que plus le nombre d'opération augmente, plus le temps d'éxecution ainsi que la consomation mémoire augmente de facon expodentielle. On peut expliquer cela par le fait que nous avons fait le choix de recreer une array pour chaque élément ajouté / inséré. Par exemple, si l'on décide d'ajouter une valeur à un tableau de 50 élements, on va creer un tableau de 51 élément vide auquel on rajoute les 50 éléments du tableau précedent ainsi que la valeur souhaité.
On constate également que le temps d'éxecution est fortement lié à la génération de nombre aléatoire. On observe une croissance logarithmique en fonction du nombre de répétition
Au niveau de la consommation de mémoire ainsi que du temps d'exécution, on constate que plus le nombre d'opération augmente, plus le temps d'exécution ainsi que la consommation mémoire augmente de façon exponentielle. On peut expliquer cela par le fait que nous avons fait le choix de recréer une array pour chaque élément ajouté / inséré. Par exemple, si l'on décide d'ajouter une valeur à un tableau de 50 éléments, on va créer un tableau de 51 élément vide auquel on rajoute les 50 éléments du tableau précèdent ainsi que la valeur souhaitée. On constate également que le temps d'exécution est fortement lié à la génération de nombre aléatoire. On observe une croissance logarithmique en fonction du nombre de répétition
```java
//Extrait du code pour la fonction insertHead() de Array
int[]tempArray=array;
...
...
@@ -128,13 +120,11 @@ for(int i = 1; i < size; i++) {
array[i]=tempArray[i-1];
}
```
En ce qui concerne les autres structures, on remarque que les insertions en tête pour la structure ArrayList sont plus lente que pour la structure linkedlist car une insertion dans une arraylist necessite de modifier l'index de chacun des éléments alors qu'une liste doublement chainée (dans notre cas) ne nécessite de modifier que 2 valeurs.
En ce qui concerne les autres structures, on remarque que les insertions en tête pour la structure ArrayList sont plus lente que pour la structure linkedlist car une insertion dans une arraylist nécessite de modifier l'index de chacun des éléments alors qu'une liste doublement chainée (dans notre cas) ne nécessite de modifier que 2 valeurs.
### Discussion des résultats préalables
Explications précises et succinctes sur ce que les limites des résultats
préalables et ce qu'ils ne permettent pas de vérifier.
Une des limite concernant les resultats obtenu sur nos graphiques sont lié au type array: En effet, lors des insertions de valeurs, on ne parvient pas à déterminer réelement le temps écoulé / la consomation de mémoire pour effectuer l'action d'insertion, puisque cette opération nécessite la recréation du tableau, ainsi que son insertion.
Explications précises et succinctes sur ce que les limites des résultats préalables et ce qu'ils ne permettent pas de vérifier. Une des limites concernant les résultats obtenus sur nos graphiques sont lié au type array: En effet, lors des insertions de valeurs, on ne parvient pas à déterminer réellement le temps écoulé / la consommation de mémoire pour effectuer l'action d'insertion, puisque cette opération nécessite la recréation du tableau, ainsi que son insertion.