-
Notifications
You must be signed in to change notification settings - Fork 90
Expand file tree
/
Copy pathmax_cache.h
More file actions
95 lines (73 loc) · 2.66 KB
/
max_cache.h
File metadata and controls
95 lines (73 loc) · 2.66 KB
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
#ifndef __MAXCACHE_H
#define __MAXCACHE_H
#include <list>
#include <set>
/** Elemento della cache
Un massimo è identificato da una coppia di indici, i e j, e da un valore s che
memorizza la similarity delle due community con indici i e j, appunto.
L'ugaglianza tra un massimo ed un altro è data dall'uguaglianza di i e j.
Il confronto invece si basa esclusivamente sul valore di s.
*/
struct Max {
/// Indice della prima community
int i;
/// Indice della seconda community
int j;
/// Similarity delle due community
double s;
};
/// Confronto LESS THAN per due elementi della cache
inline
bool operator<(const Max &a, const Max &b) {
return a.s < b.s;
}
/** Cache dei massimi valori di similarity
Questa classe implementa la cache dei massimi, cioè un particolare contenitore
di dimensione limitata che memorizza i valori più alti di similarity che gli
vengono dati, assieme agli indici delle community che li hanno generati.
La realizzazione passa attraverso un multiset, e si assicura di rispettare
tutte le relazioni di consistenza. Quando nella cache è presente l'elemento
con similarity infinita negativa, significa che la cache è aperta a ricevere
elementi qualsiasi essi siano. Questo elemento è inserito in fase di
costruzione o dopo una chiamata a clear. Quando invece si fa una get questo
elemento non viene reinserito. Check è la funzione che inserisce se è il caso
l'elemento nella collezione.
*/
class MaxCache {
private:
/// La dimensione massima della cache
unsigned int size;
/// Insieme senza vincoli di unicità degli elementi di massimo
std::multiset<Max> cache;
public:
/**
Costruttore della cache.
param size La dimensione massima della cache.
*/
MaxCache(unsigned int size);
/**
Indica se la cache è vuota, cioè se non ha elementi oppure se l'unico
elemento presente è quello a similarity infinita negativa.
return true se la cache è vuota, false altrimenti.
*/
bool isEmpty();
/**
Controlla l'elemento fornito per inserirlo eventualmente nella cache.
param i Indice della prima community
param j Indice della seconda community
param s valore della similarity calcolato
*/
void check(unsigned int i, unsigned int j, double s);
/**
Restituisce l'elemento di massimo valore. Richiede che la cache non sia
vouta, altrimenti il risultato è indefinito.
return L'elemento della cache massimo.
*/
Max get();
// void update(int i, int j, int a);
/**
Svuota la cache, riportandola alle condizioni iniziali.
*/
void clear();
};
#endif // __MAXCACHE_H