Tôi có một vector chứa các phần tử n
. Tôi cần chọn một tập hợp con gồm các phần tử m
ngẫu nhiên từ vectơ mà không lặp lại. Cách hiệu quả nhất để làm điều này là gì? Tôi cần phải làm điều này vài nghìn lần trong mã của tôi.Chọn các phần tử m một cách ngẫu nhiên từ một vector chứa các phần tử n
Giải pháp trên đầu tôi là sử dụng rand()
để tạo số ngẫu nhiên k
giữa 0
và n
. Sau đó chọn phần tử thứ k
trong vectơ và chèn nó vào một std::set
. Tiếp tục làm điều này cho đến khi kích thước của bộ này bằng m
. Bây giờ tôi đã đảm bảo rằng tập hợp chứa m
các yếu tố độc đáo được chọn ngẫu nhiên từ tập hợp các yếu tố n
.
Các giải pháp khả thi khác là gì?
Cảm ơn.
làm 'std: : random_shuffle() 'trên vectơ và kéo các phần tử' m' đầu tiên ra khỏi nó, có lẽ? – jrok
@jrok: trong khi đơn giản, đó là _highly không hiệu quả khi 'm' nhỏ hơn nhiều so với' n'. –
có thể trùng lặp của [Thuật toán để chọn một kết hợp đơn lẻ, ngẫu nhiên của các giá trị?] (Http://stackoverflow.com/questions/2394246/algorithm-to-select-a-single-random-combination-of-values) –