34gen_alphabet (
unsigned int size)
39 alphabet = (uint32_t *) malloc (size *
sizeof (*alphabet));
43 for (
unsigned int i = 0; i < size; i++)
47 for (
unsigned int i = size-1; i > 0; i--)
49 unsigned int k = (
unsigned long) i * rand () / RAND_MAX;
53 alphabet[i] = alphabet[k];
66gen_zipf_lut (
double zipf_factor,
unsigned int alphabet_size)
68 double scaling_factor;
73 lut = (
double *) malloc (alphabet_size *
sizeof (*lut));
83 for (
unsigned int i = 1; i <= alphabet_size; i++)
84 scaling_factor += 1.0 / pow (i, zipf_factor);
90 for (
unsigned int i = 1; i <= alphabet_size; i++)
92 sum += 1.0 / pow (i, zipf_factor);
93 lut[i-1] = sum / scaling_factor;
104 unsigned int alphabet_size,
111 uint32_t *alphabet = gen_alphabet (alphabet_size);
114 double *lut = gen_zipf_lut (zipf_factor, alphabet_size);
118 ret = (
item_t *) malloc (stream_size *
sizeof (*ret));
124 for (
unsigned int i = 0; i < stream_size; i++)
127 double r = ((double) rand ()) / RAND_MAX;
130 unsigned int left = 0;
131 unsigned int right = alphabet_size - 1;
139 while (right - left > 1)
141 m = (left + right) / 2;
152 uint32_t * dst = (uint32_t *)&ret[i];
153 *dst = alphabet[pos];
item_t * gen_zipf(unsigned int stream_size, unsigned int alphabet_size, double zipf_factor, item_t **output)
A wrapper file ensuring 64bit key size.