summaryrefslogtreecommitdiff
path: root/exp_0702.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'exp_0702.cpp')
-rw-r--r--exp_0702.cpp61
1 files changed, 35 insertions, 26 deletions
diff --git a/exp_0702.cpp b/exp_0702.cpp
index b848b67..eca70ad 100644
--- a/exp_0702.cpp
+++ b/exp_0702.cpp
@@ -2,13 +2,14 @@
#include <cassert>
#include <cmath>
#include <cstdio>
+#include <iostream>
#include <numeric>
+#include <string>
#include <vector>
constexpr size_t length = 1048576;
-constexpr size_t sample_length = 1024;
-constexpr long double slice_size = 1.0 / sample_length;
-std::vector<unsigned long long> population_vector, sample_vector;
+std::vector<unsigned long long> population_vector, sample_vector,
+ original_vector;
std::vector<std::vector<unsigned long long>> result_storage;
long double sample_cdf(long double x) {
@@ -30,7 +31,7 @@ inline long double safe_ceil(long double value) {
return c == 0 ? 1 : c;
}
-long double calc_stddev() {
+long double calc_stddev(const long sample_length) {
std::vector<size_t> elements;
std::vector<long double> tmp_vector;
for (auto &element : result_storage) {
@@ -40,9 +41,9 @@ long double calc_stddev() {
// auto sum = std::accumulate(elements.begin(),
// elements.end(),decltype(elements)::value_type(0)); size_t sum = length;
// printf("\nsum: %ld\n", sum);
- // auto mu = sum / (long double)elements.size();
- long double mu = sample_length;
- // printf("mu: %Lf\n", mu);
+ auto mu = length / (long double)elements.size();
+ // long double mu = sample_length;
+ // printf("mu: %Lf\n", mu);
std::transform(elements.begin(), elements.end(), tmp_vector.begin(),
[&mu](size_t element) { return std::pow(element - mu, 2); });
@@ -52,30 +53,15 @@ long double calc_stddev() {
elements.size());
}
-int main() {
- assert((length & 1) == 0);
- assert(length > 1024);
-
- FILE *file = fopen("normal_distribution.txt", "r");
- assert(file);
- for (long long i; fscanf(file, "%lld ", &i) != EOF;
- population_vector.push_back(i))
- ;
- fclose(file);
-
- assert(population_vector.size() == length);
-
- std::vector<unsigned long long> original_vector(population_vector);
-
+void mian(const long sample_length, const long split_size) {
sample_vector = std::vector<unsigned long long>(
- population_vector.begin(), population_vector.begin() + sample_length);
-
+ original_vector.begin(), original_vector.begin() + sample_length);
result_storage.resize(sample_length, std::vector<unsigned long long>());
- std::sort(population_vector.begin(), population_vector.end());
sample_vector.push_back(population_vector[0]);
sample_vector.push_back(*(population_vector.cend() - 1));
std::sort(sample_vector.begin(), sample_vector.end());
+ const auto slice_size = 1.0 / (long double)split_size;
for (auto &element : original_vector) {
result_storage[(int)safe_ceil(sample_cdf(element) / slice_size) - 1]
@@ -88,5 +74,28 @@ int main() {
for (const auto &element : result_storage) {
printf("%ld ", element.size());
}
- printf("%Lf\n", calc_stddev());
+ printf("\n%Lf\n", calc_stddev(sample_length));
+ result_storage.clear();
+}
+
+int main(int argc, char const *argv[]) {
+ assert((length & 1) == 0);
+ assert(length > 1024);
+
+ FILE *file = fopen("normal_distribution.txt", "r");
+ assert(file);
+ for (long long i; fscanf(file, "%lld ", &i) != EOF;
+ population_vector.push_back(i))
+ ;
+ fclose(file);
+
+ assert(population_vector.size() == length);
+
+ original_vector = population_vector;
+
+ std::sort(population_vector.begin(), population_vector.end());
+ auto sample_length = 0, split_size = 0;
+ while (std::cin >> sample_length >> split_size) {
+ mian(sample_length, split_size);
+ }
} \ No newline at end of file