-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathzipf.cpp
54 lines (38 loc) · 1.25 KB
/
zipf.cpp
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
#include "zipf.h"
#include "data_generator.h"
#include <vector>
using namespace std;
Zipf::Zipf(unsigned int dom_size, unsigned int tuples_no) {
this->dom_size = dom_size;
this->tuples_no = tuples_no;
tuples = NULL;
}
Zipf::~Zipf() {
dom_size = 0;
tuples_no = 0;
delete tuples;
tuples = NULL;
}
/*
The frequency of each value in the domain is first generated.
Then the corresponding number of tuples is inserted in the tuples vector.
The frequencies can be decorelated at different degrees:
decor_param < 0 corresponds to negative correlation;
decor_param = 0 corresponds to complete randomness;
decor_param = 1 corresponds to complete positive correlation or identical relations.
*/
//zipf's distribution, the first parameter determies the shape of distribution
// the second parameter
void Zipf::Generate_Data(double data_param, double decor_param) {
vector<unsigned int> freq(dom_size, 0);
tuples_no = generate_zipf(dom_size, tuples_no, data_param, freq);
decorelate(freq, decor_param);
tuples = new vector<unsigned int>(tuples_no, 0);
int c_tup = 0;
for (int i = 0; i < dom_size; i++) {
for (int j = 0; j < freq[i]; j++) {
(*tuples)[c_tup + j] = i;
}
c_tup += freq[i];
}
}