Computer >> Máy Tính >  >> Lập trình >> C ++

Trộn lẫn với random_shuffle trong C ++

Ở đây chúng ta sẽ thấy Shuffle và random_shuffle trong C ++. Hãy để chúng tôi xem random_shuffle trước. Nó được sử dụng để sắp xếp lại ngẫu nhiên các phần tử trong phạm vi [trái, phải). Chức năng này hoán đổi vị trí của từng phần tử một cách ngẫu nhiên với vị trí của một số vị trí được chọn ngẫu nhiên.

Chúng tôi có thể cung cấp một số hàm tạo ngẫu nhiên để cho biết phần tử nào sẽ được sử dụng trong mọi trường hợp. Nếu chúng tôi không cung cấp một số, nó sẽ sử dụng chức năng tạo ngẫu nhiên của riêng nó.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
int myRandomGenerator(int j) {
   return rand() % j;
}
main() {
   srand(unsigned(time(0)));
   vector<int> arr;
   for (int j = 1; j < 20; ++j) //generate 20 numbers and add them into vector arr
      arr.push_back(j);
   random_shuffle(arr.begin(), arr.end()); //use inbuilt random function to shuffle
   cout << "arr elements:";
   for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
      cout << ' ' << *i;
   cout << endl;
   // using myRandomGenerator
   random_shuffle(arr.begin(), arr.end(), myRandomGenerator);
   cout << "arr elements:";
   for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
      cout << ' ' << *i;
   cout << endl;
}

Đầu ra

Phần tử
arr elements: 5 14 15 6 3 16 13 12 10 2 4 1 17 9 18 11 7 8 19
arr elements: 8 10 5 6 14 1 15 3 19 16 13 18 7 9 4 12 11 17 2

Bây giờ chúng ta hãy xem hàm shuffle () là gì. Điều này cũng được sử dụng để sắp xếp lại các phần tử trong phạm vi [trái, phải). ngẫu nhiên. Nó cần một bộ tạo số ngẫu nhiên thống nhất.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
main() {
   vector<int> arr;
   unsigned seed = 0;
   for (int j = 1; j < 20; ++j) //generate 20 numbers and add them into vector arr
      arr.push_back(j);
   shuffle(arr.begin(), arr.end(), default_random_engine(seed));
   cout << "arr elements:";
   for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
      cout << ' ' << *i;
   cout << endl;
}

Đầu ra

Phần tử
arr elements: 19 7 5 6 12 4 13 3 1 17 11 14 18 2 8 15 9 10 16

Sự khác biệt duy nhất giữa random_shuffle () và shuffle () là, random_shuffle () sử dụng hàm rand () để tạo các chỉ số ngẫu nhiên và shuffle () sử dụng bộ tạo số ngẫu nhiên thống nhất. Mặc dù vậy, nếu chúng ta chuyển bộ tạo số ngẫu nhiên thống nhất với random_shuffle (), thì nó sẽ tạo ra cùng một loại kết quả.