-
Notifications
You must be signed in to change notification settings - Fork 0
/
analyzer.h
104 lines (91 loc) · 3.59 KB
/
analyzer.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#ifndef __ANALYZER_H__
#define __ANALYZER_H__
#include <stddef.h>
/**
Structure utilisée pour faire des statistiques élémentaires
sur une séquence d'opérations.
*/
typedef struct analyzer_s{
// Coût de chaque opération. Peut représenter du temps ou une autre mesure.
double * cost;
// Coût cumulatif. La case i contient la somme des coûts des i premières opérations.
// Permet de calculer le coût amorti d'une opération.
long double * cumulative_cost;
// Carré du coût cumulatif. Sert à calculer la variance. On ne garde que la dernière valeur.
long double cumulative_square;
// Capacité de stockage des tableaux
size_t capacity;
// Nombre d'éléments dans chaque tableaux.
size_t size;
} analyzer_t;
/**
Fonction d'initialisation d'une analyse.
Complexité en temps/espace, pire et meilleur cas : O(1)
@return Un pointeur sur une structure analyzer_t nouvellement allouée.
*/
analyzer_t * analyzer_create();
/**
Fonction de libération de la mémoire occupée par une analyse.
Complexité en temps/espace, pire et meilleur cas : O(1)
@param a est un pointeur vers l'espace mémoire que la fonction va libérer.
*/
void analyzer_destroy(analyzer_t * a);
/**
Ajoute un coût, une valeur à l'analyse.
Complexité en temps/espace, pire cas : O(size)
Complexité en temps/espace, meilleur cas : O(1)
Complexité amortie : O(1)
@param a est l'analyse à laquelle on souhaite ajouter une valeur.
@param cost est la valeur que l'on souhaite ajouter.
*/
void analyzer_append(analyzer_t * a, double cost);
/**
Renvoie la somme des coûts enregistrés dans cette analyse.
Complexité en temps/espace, pire cas : O(1)
@param a est une analyse.
@returns la somme des coûts enregistrés dans cette analyse.
*/
long double get_total_cost(analyzer_t * a);
/**
Renvoie le coût amorti d'une opération.
Complexité en temps/espace, pire cas : O(1)
@param a est une analyse.
@param pos est l'indice de l'opération pour laquelle on veut connaître le coût amorti.
@returns le coût amorti d'une opération.
*/
long double get_amortized_cost(analyzer_t * a, size_t pos);
/**
Renvoie la moyenne des coûts de toutes les opérations enregistrées dans l'analyse.
Complexité en temps/espace, pire cas : O(1)
@param a est une analyse.
@returns la moyenne des coûts de toutes les opérations enregistrées dans l'analyse.
*/
long double get_average_cost(analyzer_t * a);
/**
Renvoie la variance des coûts de toutes les opérations enregistrées dans l'analyse.
Complexité en temps/espace, pire cas : O(1)
@param a est une analyse.
@returns la variance des coûts de toutes les opérations enregistrées dans l'analyse.
*/
long double get_variance(analyzer_t * a);
/**
Renvoie l'écart-type des coûts de toutes les opérations enregistrées dans l'analyse.
Complexité en temps/espace, pire cas : O(1)
@param a est une analyse.
@returns l'écart-type des coûts de toutes les opérations enregistrées dans l'analyse.
*/
long double get_standard_deviation(analyzer_t * a);
/**
Sauvegarde la liste des coûts et des coûts amortis dans un fichier.
Complexité en temps, meilleur/pire cas : O(size)
@param a est l'analyse que l'on souhaite sauvegarder.
@param path est le chemin du fichier dans lequel la sauvegarde est faite.
*/
void save_values(analyzer_t * a, char * path);
/**
Affiche la liste des coûts et des coûts amortis sur la sortie standard.
Complexité en temps, meilleur/pire cas : O(size)
@param a est l'analyse que l'on souhaite sauvegarder.
*/
void plot_values(analyzer_t * a);
#endif