Xáo trộn () so với Random_shuffle () trong C++

Xao Tron So Voi Random Shuffle Trong C



Trong C++, thư viện chuẩn cung cấp hai hàm, xáo trộn() random_shuffle() được sử dụng để sắp xếp lại các phần tử của vùng chứa. Mặc dù cả hai chức năng đều phục vụ cùng một mục đích, nhưng chúng khác nhau về cách triển khai và cách tạo số ngẫu nhiên.

Từ bài viết này, bạn sẽ tìm thấy sự khác biệt giữa hai chức năng này và hiểu cách chúng hoạt động.

xáo trộn () trong C++

Các xáo trộn() hàm là một hàm có sẵn trong C++ được sử dụng để xáo trộn hoặc sắp xếp lại ngẫu nhiên các phần tử trong một phạm vi nhất định. Hàm được khai báo trong tệp tiêu đề và có hai đối số: vị trí bắt đầu của phạm vi là đối số đầu tiên và đối số thứ hai biểu thị vị trí kết thúc.







Ngoài ra, nó cũng nhận một tham số thứ ba tùy chọn, là một đối tượng hàm tạo ra các số ngẫu nhiên được sử dụng để xáo trộn các phần tử trong phạm vi.



Khi mà xáo trộn() được gọi, nó sẽ sắp xếp lại ngẫu nhiên các phần tử trong phạm vi đã chỉ định bằng cách sử dụng trình tạo số ngẫu nhiên được cung cấp. Kết quả của việc xáo trộn là không thể dự đoán được và mỗi hoán vị có thể có của các phần tử đều có khả năng xảy ra như nhau.



Ví dụ

Hãy xem xét ví dụ dưới đây về việc sử dụng chức năng xáo trộn () trong C++. Trong chương trình này, chúng ta đã tạo ra vector một vật với các giá trị nguyên từ 0 đến 10. Sau đó, chúng tôi tạo một trình tạo số ngẫu nhiên, sau đó được chuyển cùng với phạm vi của vectơ đến xáo trộn() chức năng. Các xáo trộn() hàm lấy số và hoán đổi các phần tử dựa trên số này. Sau đó, chúng tôi đã in chuỗi vectơ được sắp xếp lại bằng vòng lặp for





#include

#bao gồm

#include

#bao gồm

#include

sử dụng không gian tên std ;

int chủ yếu ( )

{

véc tơ < int > một vật { 1 , 2 , 3 , 4 , 5 , 6 , 7 , số 8 , 9 , 10 } ;

chưa ký hạt giống = niên đại :: đồng hồ hệ thống :: Hiện nay ( ) . time_since_epoch ( ) . đếm ( ) ;

xáo trộn ( một vật. bắt đầu ( ) , một vật. kết thúc ( ) , default_random_engine ( hạt giống ) ) ;

cout << 'các phần tử được xáo trộn là:' ;

( int & Tôi : một vật )

cout << '' << Tôi ;

cout << kết thúc ;

trở lại 0 ;

}

Random_shuffle() trong C++

Các random_shuffle() cũng sắp xếp lại ngẫu nhiên các phần tử trong phạm vi đã cho với một số được chọn ngẫu nhiên. Nó sử dụng một trình tạo số ngẫu nhiên để tạo ra một dãy các số ngẫu nhiên rồi dùng các số đó để xáo trộn các phần tử trong dãy, vì vậy trình tự của chương trình sẽ khác nhau mỗi khi bạn chạy chương trình.



Hai tham số được yêu cầu cho random_shuffle() : vị trí bắt đầu của phạm vi là tham số đầu tiên và tham số thứ hai là vị trí kết thúc. Ngoài ra, random_shuffle() có thể lấy một tham số thứ ba tùy chọn, là một đối tượng hàm có thể được sử dụng để tạo các số ngẫu nhiên để xáo trộn các phần tử.

Ví dụ

Ví dụ dưới đây minh họa hoạt động của random_shuffle() trong C++. Trong mã này, chúng tôi đã tạo một thứ véc tơ với các giá trị số nguyên từ 1 đến 10 và sau đó sử dụng cho vòng lặp để in trình tự xáo trộn ngẫu nhiên:

#include

#include

sử dụng không gian tên std ;

int chủ yếu ( )

{

véc tơ < int > một vật { 1 , 2 , 3 , 4 , 5 , 6 , 7 , số 8 , 9 , 10 } ;

srand ( tĩnh_cast < chưa ký int > ( thời gian ( nullptr ) ) ) ;

ngẫu nhiên_shuffle ( một vật. bắt đầu ( ) , một vật. kết thúc ( ) ) ;

( int Tôi : một vật ) {

cout << Tôi << '' ;

}

cout << ' \N ' ;



trở lại 0 ;

}

Sự khác biệt giữa shuffle() và random_shuffle()

Dưới đây là những khác biệt chính giữa xáo trộn() random_shuffle() hàm trong C++.

1: random_shuffle() lấy một cặp vòng lặp đại diện cho phạm vi phần tử để xáo trộn, trong khi xáo trộn() lấy một cặp trình vòng lặp đại diện cho phạm vi phần tử cần xáo trộn, cũng như một bộ tạo số ngẫu nhiên để sử dụng cho việc xáo trộn.

2: random_shuffle() nói chung là kém hiệu quả hơn so với xáo trộn() , vì nó phải tạo ra một chuỗi số ngẫu nhiên để sử dụng cho việc xáo trộn.

3: random_shuffle() sử dụng triển khai nội bộ của Bộ tạo số ngẫu nhiên của Thư viện chuẩn C++ để xáo trộn các phần tử, trong khi xáo trộn() cho phép bạn chỉ định trình tạo số ngẫu nhiên của riêng mình để sử dụng cho việc xáo trộn, cho phép bạn kiểm soát nhiều hơn tính ngẫu nhiên của việc xáo trộn.

4: Random_shuffle() được giới thiệu trong C++98 và được hỗ trợ bởi tất cả các phiên bản của Thư viện chuẩn C++, trong khi xáo trộn() đã được giới thiệu trong C++11 và chỉ được hỗ trợ bởi các trình biên dịch triển khai phiên bản tiêu chuẩn đó.

Suy nghĩ cuối cùng

Sự lựa chọn giữa xáo trộn() random_shuffle() phụ thuộc vào trường hợp sử dụng và yêu cầu cụ thể của bạn. Nếu bạn cần kiểm soát nhiều hơn đối với tính ngẫu nhiên của việc xáo trộn hoặc nếu bạn muốn sử dụng trình tạo số ngẫu nhiên tùy chỉnh, thì xáo trộn() sẽ là một sự lựa chọn tốt hơn. Mặt khác, nếu bạn không cần mức độ kiểm soát đó và chỉ muốn một cách đơn giản để xáo trộn các phần tử, thì random_shuffle() có thể là đủ.