Commit 3d663b89 authored by Jeremie MALUEKI NGOMBI's avatar Jeremie MALUEKI NGOMBI
Browse files

nouveau plots

parent 6fec2118
Pipeline #4649 failed with stage
in 6 seconds
CC= gcc
CXXFLAGS= -Wall -ansi --pedantic -O3
CPP_O_FILE = arraylist.o analyzer.o main.o
CPP_O_FILE = arraylist.o analyzer.o main_random.o
LIB = -lm
......
#include "arraylist.h"
#include<stdio.h>
#include <math.h>
#include<stdlib.h>
arraylist_t * arraylist_create(size_t capacity){
arraylist_t * arraylist_create(int capacity){
arraylist_t * res = (arraylist_t *) malloc( sizeof(arraylist_t) );
res->data = (int *) malloc( sizeof(int) * capacity);
res->data = (int *) malloc( sizeof(int) * capacity );
res->capacity = capacity;
res->size = 0;
res->swap = 0;
......@@ -17,31 +18,30 @@ void arraylist_destroy(arraylist_t * a){
free( a->data );
free( a );
}
printf("arraylist supprimée\n");
}
char arraylist_append(arraylist_t * a, int x){
char memory_allocation = FALSE;
if( a!=NULL ){
if( a->size >= a->capacity){
fprintf(stderr, "Le tas est plein\n");
fprintf(stderr, "Tas déja plein\n");
}
(a->size)++;
int i = a->size-1;
a->swap = 0;
int i=a->size+1;
a->data[i] = x;
while ((i!=0) && (a->data[(i-1)/2] > a->data[i]))
while ((i>0) && (a->data[i] < a->data[i/2]))
{
int tmp=a->data[i];
a->data[i]=a->data[(i-1)/2];
a->data[(i-1)/2]=tmp;
(a->swap)++;
i=(i-1)/2;
a->data[i]=a->data[i/2];
a->data[i/2]=tmp;
a->swap++;
i=i/2;
}
a->size++;
}
return memory_allocation;
}
char arraylist_pop_back(arraylist_t * a){
char memory_reduction = FALSE;
if( a!=NULL && a->size>0 ){
......@@ -90,5 +90,7 @@ void arraylist_reduce_capacity(arraylist_t * a){
}
size_t arraylist_swap(arraylist_t * a){
return a->swap;
if(a!=NULL)
return a->swap;
return 0;
}
\ No newline at end of file
......@@ -17,6 +17,7 @@ typedef struct arraylist_s{
size_t capacity;
// Nombre d'éléments stockés dans le tableau.
size_t size;
//nombre de swap effectué
size_t swap;
} arraylist_t;
......@@ -26,7 +27,7 @@ typedef struct arraylist_s{
@param capacity est la capacité que l'on souhaite donner a l'arraylist
@return Un pointeur sur un tableau dynamique nouvellement alloué.
*/
arraylist_t * arraylist_create(size_t capacity);
arraylist_t * arraylist_create(int capacity);
/**
Fonction de libération de la mémoire occupée par un tableau dynamique.
......@@ -40,8 +41,8 @@ void arraylist_destroy(arraylist_t * a);
Complexité en temps/espace, pire cas : O(size)
Complexité en temps/espace, meilleur cas : O(1)
Complexité amortie : O(1)
@param a est le tableau auquel on souhaite ajouter une valeur.
@param x est la valeur que l'on souhaite ajouter.
@param a est le tableau auquel on souhaite ajouter une valeur.
@param x est la valeur que l'on souhaite ajouter
@returns VRAI si le tableau a été agrandit, FAUX sinon
*/
char arraylist_append(arraylist_t * a, int x);
......
#include<stdio.h>
#include <time.h>
#include<stdlib.h>
#include "arraylist.h"
#include "analyzer.h"
int main(int argc, char ** argv){
int i;
// Tableau dynamique.
arraylist_t * a = arraylist_create(1000000); //Capacité de 1 000 0000
// Analyse du temps pris par les opérations.
analyzer_t * time_analysis = analyzer_create();
// Analyse du nombre de copies faites par les opérations.
analyzer_t * swap_analysis = analyzer_create();
// Analyse de l'espace mémoire inutilisé.
analyzer_t * memory_analysis = analyzer_create();
// Mesure de la durée d'une opération.
struct timespec before, after;
clockid_t clk_id = CLOCK_REALTIME;
// utilisé comme booléen pour savoir si une allocation a été effectuée.
char memory_allocation;
srand(time(NULL));
int rnd;
for(i = 0; i < 1000000; i++){
rnd = rand() % 1000000;
// Ajout d'un élément et mesure du temps pris par l'opération.
clock_gettime(clk_id, &before);
memory_allocation = arraylist_append(a, rnd);
clock_gettime(clk_id, &after);
// Enregistrement du temps pris par l'opération
analyzer_append(time_analysis, after.tv_nsec - before.tv_nsec);
// Enregistrement du nombre de copies efféctuées par l'opération.
// S'il y a eu réallocation de mémoire, il a fallu recopier tout le tableau.
analyzer_append(swap_analysis,arraylist_swap(a));
// Enregistrement de l'espace mémoire non-utilisé.
analyzer_append(memory_analysis,arraylist_capacity(a)-arraylist_size(a));
}
// Affichage de quelques statistiques sur l'expérience.
fprintf(stderr, "Total cost: %Lf\n", get_total_cost(time_analysis));
fprintf(stderr, "Average cost: %Lf\n", get_average_cost(time_analysis));
fprintf(stderr, "Variance: %Lf\n", get_variance(time_analysis));
fprintf(stderr, "Standard deviation: %Lf\n", get_standard_deviation(time_analysis));
// Sauvegarde les données de l'expérience.
save_values(time_analysis, "../plots/fixed_binary_heap_amortized_time_C_RANDOM.plot");
save_values(swap_analysis, "../plots/fixed_binary_heap_swap_C_RANDOM.plot");
save_values(memory_analysis, "../plots/fixed_binary_heap_wasted_memory_C_RANDOM.plot");
// Nettoyage de la mémoire avant la sortie du programme
arraylist_destroy(a);
analyzer_destroy(time_analysis);
analyzer_destroy(swap_analysis);
analyzer_destroy(memory_analysis);
return EXIT_SUCCESS;
}
\ No newline at end of file
#include<stdio.h>
#include <time.h>
#include<stdlib.h>
#include "arraylist.h"
#include "analyzer.h"
int main(int argc, char ** argv){
int i;
// Tableau dynamique.
arraylist_t * a = arraylist_create();
// Analyse du temps pris par les opérations.
analyzer_t * time_analysis = analyzer_create();
// Analyse du nombre de copies faites par les opérations.
analyzer_t * copy_analysis = analyzer_create();
// Analyse de l'espace mémoire inutilisé.
analyzer_t * memory_analysis = analyzer_create();
// Mesure de la durée d'une opération.
struct timespec before, after;
clockid_t clk_id = CLOCK_REALTIME;
// utilisé comme booléen pour savoir si une allocation a été effectuée.
char memory_allocation;
for(i = 0; i < 1000000 ; i++){
// Ajout d'un élément et mesure du temps pris par l'opération.
clock_gettime(clk_id, &before);
memory_allocation = arraylist_append(a, i);
clock_gettime(clk_id, &after);
// Enregistrement du temps pris par l'opération
analyzer_append(time_analysis, after.tv_nsec - before.tv_nsec);
// Enregistrement du nombre de copies efféctuées par l'opération.
// S'il y a eu réallocation de mémoire, il a fallu recopier tout le tableau.
analyzer_append(copy_analysis, (memory_allocation)? i:1 );
// Enregistrement de l'espace mémoire non-utilisé.
analyzer_append(memory_analysis,arraylist_capacity(a)-arraylist_size(a));
}
// Affichage de quelques statistiques sur l'expérience.
fprintf(stderr, "Total cost: %Lf\n", get_total_cost(time_analysis));
fprintf(stderr, "Average cost: %Lf\n", get_average_cost(time_analysis));
fprintf(stderr, "Variance: %Lf\n", get_variance(time_analysis));
fprintf(stderr, "Standard deviation: %Lf\n", get_standard_deviation(time_analysis));
// Sauvegarde les données de l'expérience.
save_values(time_analysis, "../plots/dynamic_array_time_c.plot");
save_values(copy_analysis, "../plots/dynamic_array_copy_c.plot");
save_values(memory_analysis, "../plots/dynamic_array_memory_c.plot");
// Nettoyage de la mémoire avant la sortie du programme
arraylist_destroy(a);
analyzer_destroy(time_analysis);
analyzer_destroy(copy_analysis);
analyzer_destroy(memory_analysis);
return EXIT_SUCCESS;
}
......@@ -31,7 +31,7 @@ int main(int argc, char ** argv){
analyzer_append(time_analysis, after.tv_nsec - before.tv_nsec);
// Enregistrement du nombre de copies efféctuées par l'opération.
// S'il y a eu réallocation de mémoire, il a fallu recopier tout le tableau.
analyzer_append(swap_analysis, (memory_allocation)? i:1 );
analyzer_append(swap_analysis, arraylist_swap(a) );
// Enregistrement de l'espace mémoire non-utilisé.
analyzer_append(memory_analysis,arraylist_capacity(a)-arraylist_size(a));
}
......@@ -43,9 +43,9 @@ int main(int argc, char ** argv){
fprintf(stderr, "Standard deviation: %Lf\n", get_standard_deviation(time_analysis));
// Sauvegarde les données de l'expérience.
save_values(time_analysis, "../plots/fixed_binary_heap_amortized_time_C_DESCRASING.plot");
save_values(swap_analysis, "../plots/fixed_binary_heap_swap_C_DESCRASING.plot");
save_values(memory_analysis, "../plots/fixed_binary_heap_wasted_memory_C_DESCRASING.plot");
save_values(time_analysis, "../plots/fixed_binary_heap_amortized_time_C_decreasing.plot");
save_values(swap_analysis, "../plots/fixed_binary_heap_swap_C_decreasing.plot");
save_values(memory_analysis, "../plots/fixed_binary_heap_wasted_memory_C_decreasing.plot");
// Nettoyage de la mémoire avant la sortie du programme
arraylist_destroy(a);
......
#include<stdio.h>
#include <time.h>
#include<stdlib.h>
#include "arraylist.h"
#include "analyzer.h"
int main(int argc, char ** argv){
int i;
// Tableau dynamique.
arraylist_t * a = arraylist_create(1000000); //Capacité de 1 000 0000
// Analyse du temps pris par les opérations.
analyzer_t * time_analysis = analyzer_create();
// Analyse de l'espace mémoire inutilisé.
analyzer_t * memory_analysis = analyzer_create();
// Analyse du nombre de copies faites par les opérations.
analyzer_t * swap_analysis = analyzer_create();
// Mesure de la durée d'une opération.
struct timespec before, after;
clockid_t clk_id = CLOCK_REALTIME;
// utilisé comme booléen pour savoir si une allocation a été effectuée.
char memory_allocation;
srand(time(NULL));
int rnd;
for(i = 0; i < 1000000; i++){
rnd = rand() % 1000000;
// Ajout d'un élément et mesure du temps pris par l'opération.
clock_gettime(clk_id, &before);
memory_allocation = arraylist_append(a, rnd);
clock_gettime(clk_id, &after);
// Enregistrement du temps pris par l'opération
analyzer_append(time_analysis, after.tv_nsec - before.tv_nsec);
// Enregistrement de l'espace mémoire non-utilisé.
analyzer_append(memory_analysis,arraylist_capacity(a)-arraylist_size(a));
// Enregistrement du nombre d'echange efféctuées par l'opération.
analyzer_append(swap_analysis,arraylist_swap(a));
}
// Affichage de quelques statistiques sur l'expérience.
fprintf(stderr, "Total cost: %Lf\n", get_total_cost(time_analysis));
fprintf(stderr, "Average cost: %Lf\n", get_average_cost(time_analysis));
fprintf(stderr, "Variance: %Lf\n", get_variance(time_analysis));
fprintf(stderr, "Standard deviation: %Lf\n", get_standard_deviation(time_analysis));
// Sauvegarde les données de l'expérience.
save_values(time_analysis, "../plots/fixed_binary_heap_amortized_time_C_RANDOM.plot");
save_values(swap_analysis, "../plots/fixed_binary_heap_swap_C_RANDOM.plot");
save_values(memory_analysis, "../plots/fixed_binary_heap_wasted_memory_C_RANDOM.plot");
// Nettoyage de la mémoire avant la sortie du programme
arraylist_destroy(a);
analyzer_destroy(time_analysis);
analyzer_destroy(memory_analysis);
analyzer_destroy(swap_analysis);
return EXIT_SUCCESS;
}
\ No newline at end of file
......@@ -12,9 +12,9 @@ set xlabel "Nombre d'elements ajoutes" font "Helvetica,24"
set ylabel "Temps amorti" font "Helvetica,24"
# Nom du fichier Postscript en sortie
set output 'fixed_binary_heap_amortized_time_C_RANDOM.pdf'
set output 'fixed_binary_heap_amortized_time_C_random.pdf'
plot [0:1000000][0:600] 'fixed_binary_heap_amortized_time_C_RANDOM.plot' using 1:3 w lines title "Amortized C"
plot [0:1000000][0:600] 'fixed_binary_heap_amortized_time_C_random.plot' using 1:3 w lines title "Amortized C"
###############################################################
########### Affichage de l'espace mémoire gaspillé ###########
......@@ -23,9 +23,9 @@ plot [0:1000000][0:600] 'fixed_binary_heap_amortized_time_C_RANDOM.plot' using 1
set ylabel "Memoire gaspillee" font "Helvetica,24"
# Nom du fichier Postscript en sortie
set output 'fixed_binary_heap_wasted_memory_C_RANDOM.pdf'
set output 'fixed_binary_heap_wasted_memory_C_random.pdf'
plot 'fixed_binary_heap_wasted_memory_C_RANDOM.plot' using 1:2 w lines title "Espace memoire inutilise C"
plot 'fixed_binary_heap_wasted_memory_C_random.plot' using 1:2 w lines title "Espace memoire inutilise C"
#################################################################
########### Affichage du nombre de copies effectuées ###########
......@@ -34,6 +34,6 @@ plot 'fixed_binary_heap_wasted_memory_C_RANDOM.plot' using 1:2 w lines title "Es
set ylabel "Nombre de swap effectuees" font "Helvetica,24"
# Nom du fichier Postscript en sortie
set output 'fixed_binary_heap_swap_C_RANDOM.pdf'
set output 'fixed_binary_heap_swap_C_random.pdf'
plot 'fixed_binary_heap_swap_C_RANDOM.plot' using 1:2 w boxes title "Nombre de swap effectuees C"
\ No newline at end of file
plot 'fixed_binary_heap_swap_C_random.plot' using 1:2 w boxes title "Nombre de swap effectuees C"
\ No newline at end of file
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