diff options
| -rw-r--r-- | exp_3.cpp | 44 | ||||
| -rw-r--r-- | main.cu | 2 |
2 files changed, 37 insertions, 9 deletions
@@ -1,10 +1,12 @@ #include <algorithm> #include <cassert> +#include <cmath> #include <cstdio> #include <set> #include <vector> constexpr size_t length = 1048576; +constexpr size_t sample_length = 1000; int main() { @@ -22,7 +24,7 @@ int main() { assert(vector1.size() == length); auto it = vector1.begin(); - for (int i = 1; i <= 1000; i++) { + for (int i = 1; i <= sample_length; i++) { auto element = *it; auto ret = set2.insert(element); if (ret.second) { @@ -32,7 +34,7 @@ int main() { it++; } - assert(vector2.size() == 1000); + assert(vector2.size() == sample_length); auto it2 = set2.begin(); int cnt = 0; @@ -42,13 +44,39 @@ int main() { // printf("%d ", cnt); } - it2 = set1.begin(); + auto it1 = set1.begin(); cnt = 0; - for (long long it1 : set2) { - while (it1 > *it2 && it2 != set1.end()) - it2++, cnt++; - printf("%d ", cnt); + for (it2 = set2.begin(); it2 != set2.end(); it2++) { + while (*it2 > *it1 && it1 != set1.end()) + it1++, cnt++; + // printf("%d ", cnt); + } + + auto ita = set2.begin(), itb = set2.begin(); + itb++; + long double dx = (*itb - *ita); + int cnt1 = 0, cnt2 = 0; + // for (auto it = set2.begin(); it != set2.end(); it++) printf("%lld ", *it); + // printf("\n"); + long double e = 0; + for (auto iter = set1.begin(); iter != set1.end(); iter++, cnt1++) { + if (*iter <= *set2.begin()) { + e += fabs(0.0 - double(cnt1) / (length - 1)); + printf("%.4lf ", 0.0); + continue; + } + while (itb != set2.end() && *iter > *itb) + ita++, itb++, dx = (*itb - *ita), cnt2++; + if (*itb == *set2.end()) { + e += fabs(1.0 - double(cnt1) / (length - 1)); + printf("%.4lf ", 100.0); + continue; + } + // printf("%lld %lld %lld ", *ita, *it, *itb); + long double res = (cnt2 + (*iter - *ita) / dx) / (sample_length - 1); + e += std::abs(res - (long double)cnt1 / (length - 1)); + printf("%.4Lf ", res * 100); } - puts(""); + printf("\n%.4Lf", e); return 0; }
\ No newline at end of file @@ -888,7 +888,7 @@ int main(int argc, char **argv) { break; fprintf(file, "%d\n", tmp[i]); } - printf("%d\n", i); + // printf("%d\n", i); delete[] tmp; fclose(file); } |
