summaryrefslogtreecommitdiff
path: root/exp_3.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'exp_3.cpp')
-rw-r--r--exp_3.cpp44
1 files changed, 25 insertions, 19 deletions
diff --git a/exp_3.cpp b/exp_3.cpp
index 26e14e5..c4a7b74 100644
--- a/exp_3.cpp
+++ b/exp_3.cpp
@@ -10,13 +10,14 @@ constexpr size_t length = 1048576;
constexpr size_t sample_length = 1000;
#define CALC_HEIGHT
-#define CALC_CDF_DIFF
+//#define CALC_CDF_DIFF
+//#define INSERT_LIMIT_VALUE
#ifdef CALC_HEIGHT
constexpr int block_size = 2;
unsigned trailing_zeroes(size_t index) {
unsigned bits = 0;
- unsigned x = index / block_size;
+ unsigned x = index;
if (x) {
while (x % block_size == 0) {
@@ -28,12 +29,12 @@ unsigned trailing_zeroes(size_t index) {
}
unsigned int getHeight(long loc) {
- if (loc % block_size == 0) {
- auto level = trailing_zeroes(loc) + 1;
- return level - 1;
- }
+ // if (loc % block_size == 0) {
+ auto level = trailing_zeroes(loc) + 1;
+ return level;
+ //}
- return 0;
+ // return 1;
}
#else
unsigned int getHeight(long loc) { return loc; }
@@ -47,6 +48,10 @@ void initialize(const std::vector<long long> &input_population,
std::sort(population_vector.begin(), population_vector.end());
sample_vector = input_sample;
std::sort(sample_vector.begin(), sample_vector.end());
+#ifdef INSERT_LIMIT_VALUE
+ sample_vector.insert(sample_vector.cbegin(), *population_vector.begin());
+ sample_vector.push_back(*(population_vector.end() - 1));
+#endif
}
long double sample_cdf(long double x) {
@@ -64,7 +69,7 @@ long double sample_cdf(long double x) {
}
int infer_offset(long double x) {
- return int(sample_cdf(x) * double(population_vector.size()));
+ return (int)std::round(sample_cdf(x) * double(population_vector.size()));
}
#ifdef CALC_CDF_DIFF
int infer_offset_from_cdf(long double cdf) {
@@ -89,19 +94,15 @@ int main() {
std::vector<long long> original_vector;
- std::set<long long> set1, set2;
-
- typedef std::tuple<int, int, long double> element_type;
-
- std::vector<element_type> location;
+ std::set<long long> set2;
FILE *file = fopen("normal_distribution.txt", "r");
+ assert(file);
for (long long i; fscanf(file, "%lld ", &i) != EOF;
- original_vector.push_back(i), set1.insert(i))
+ original_vector.push_back(i))
;
fclose(file);
- assert(original_vector.size() == set1.size());
assert(original_vector.size() >= length);
auto it = original_vector.begin();
@@ -127,11 +128,16 @@ int main() {
getHeight(iter - population_vector.begin()),
std::abs(cdf - stat_cdf(*iter)));
#else
- printf("%d,%d ", getHeight(infer_offset(*iter)),
- getHeight(iter - population_vector.begin()));
+ auto index = infer_offset(*iter);
+ printf("%d,%d,%d,%ld\n", getHeight(index), index,
+ getHeight(iter - population_vector.begin() + 1),
+ iter - population_vector.begin() + 1);
#endif
- fflush(stdout);
+ // fflush(stdout);
}
- puts("");
+ // puts("");
+ // printf("%lld, %lld\n", sample_vector[1], *(sample_vector.end() - 2));
+ // printf("%lld, %lld\n", population_vector[0], *(population_vector.end() -
+ // 1));
return 0;
} \ No newline at end of file