shushus

Спринт 6. Измеряем время.

Dec 25th, 2022
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.66 KB | None | 0 0
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <vector>
  4. #include <chrono>
  5.  
  6. using namespace std;
  7. using namespace chrono;
  8.  
  9. vector<int> ReverseVector(const vector<int>& source_vector) {
  10.     vector<int> res;
  11.     for (int i : source_vector) {
  12.         res.insert(res.begin(), i);
  13.     }
  14.     return res;
  15. }
  16.  
  17. int CountPops(const vector<int>& source_vector, int begin, int end) {
  18.     int res = 0;
  19.     for (int i = begin; i < end; ++i) {
  20.         if (source_vector[i]) {
  21.             ++res;
  22.         }
  23.     }
  24.     return res;
  25. }
  26.  
  27. void AppendRandom(vector<int>& v, int n) {
  28.     for (int i = 0; i < n; ++i) {
  29.         v.push_back(rand() % 2);
  30.     }
  31. }
  32.  
  33. void Operate() {
  34.     vector<int> random_bits;
  35.  
  36.     static const int N = 1 << 17;
  37.  
  38.     auto start_time = steady_clock::now();
  39.     AppendRandom(random_bits, N);
  40.     auto end_time = steady_clock::now();
  41.     cerr << "Append random: "s << duration_cast<milliseconds>(end_time - start_time).count() << " ms"s << endl;
  42.  
  43.     start_time = steady_clock::now();
  44.     vector<int> reversed_bits = ReverseVector(random_bits);
  45.     end_time = steady_clock::now();
  46.     cerr << "Reverse: "s << duration_cast<milliseconds>(end_time - start_time).count() << " ms"s << endl;
  47.  
  48.     start_time = steady_clock::now();
  49.     for (int i = 1, step = 1; i <= N; i += step, step *= 2) {
  50.         double rate = CountPops(reversed_bits, 0, i) * 100. / i;
  51.         cout << "After "s << i << " bits we found "s << rate << "% pops"s
  52.              << endl;
  53.     }
  54.     end_time = steady_clock::now();
  55.     cerr << "Counting: "s << duration_cast<milliseconds>(end_time - start_time).count() << " ms"s << endl;
  56. }
  57.  
  58. int main() {
  59.     Operate();
  60.     return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment