Advertisement
Jasir

Random

Sep 11th, 2019
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.88 KB | None | 0 0
  1. #include <algorithm>
  2. #include <chrono>
  3. #include <iostream>
  4. #include <random>
  5. #include <vector>
  6. using namespace std;
  7.  
  8. const int N = 3000000;
  9.  
  10. double average_distance(const vector<int> &permutation) {
  11.     double distance_sum = 0;
  12.  
  13.     for (int i = 0; i < N; i++)
  14.         distance_sum += abs(permutation[i] - i);
  15.  
  16.     return distance_sum / N;
  17. }
  18.  
  19. int main() {
  20.     mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  21.     vector<int> permutation(N);
  22.  
  23.     for (int i = 0; i < N; i++)
  24.         permutation[i] = i;
  25.  
  26.     shuffle(permutation.begin(), permutation.end(), rng);
  27.     cout << average_distance(permutation) << '\n';
  28.  
  29.     for (int i = 0; i < N; i++)
  30.         permutation[i] = i;
  31.  
  32.     for (int i = 1; i < N; i++)
  33.         swap(permutation[i], permutation[uniform_int_distribution<int>(0, i)(rng)]);
  34.  
  35.     cout << average_distance(permutation) << '\n';
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement