Tôi đang làm việc để chuyển mô phỏng MATLAB vào C++. Để làm điều này, tôi đang cố gắng sao chép randsample() function của MATLAB. Tôi đã không tìm ra một cách hiệu quả để làm điều này được nêu ra.C++ lấy mẫu ngẫu nhiên các số k từ phạm vi 0: n-1 (n> k) mà không cần thay thế
Vì vậy, tôi hỏi tất cả các bạn, làm cách nào để lấy mẫu k một cách ngẫu nhiên từ một phạm vi 0: n-1 (cho n> k) mà không cần thay thế trong C++?
Tôi đã xem xét các giả sau đây (lấy cảm hứng từ các ví dụ thứ ba trên cppreference.com), nhưng tôi có cảm giác như đó là một chút hacky:
initialize vect<int> v of size n
for i = 0 to n-1
v[i] = i
shuffle v
return v[0 to k-1]
Hạn chế ở đây cũng là yêu cầu để xây dựng một mảng lớn đầu tiên quá. Điều đó có vẻ như quá chậm/clunky overkill.
Tôi rất thích một số hướng ở đây nếu bạn có thể trợ giúp. Tôi ít quan tâm đến lý thuyết (thuật toán thú vị nhưng không liên quan đến nhu cầu của tôi bây giờ) hơn là cách tốt nhất để thực hiện điều này trong C++.
Cảm ơn trước!
Bạn tagged C++ này, nhưng mã của bạn là giả mã. Bạn quan tâm đến điều gì? – Daniel
Câu hỏi đủ hợp lý. Tôi quan tâm đến C++, nhưng các chức năng đặc biệt đáng giá trong C++ để làm công việc dơ bẩn. Tôi không muốn phát minh lại bánh xe, và có vẻ như đây là những thứ khá cơ bản nên tôi tưởng tượng có những thứ ở ngoài đó. Tôi chỉ không thể tìm thấy nó hoặc tìm ra nó. – marcman
Thuật toán hoàn toàn phù hợp với nhu cầu của bạn ngay bây giờ, đó chính xác là những gì bạn đang yêu cầu. – BlamKiwi