01/10/2018, 09:09
Lấy ngẫu nhiên m số nguyên khác nhau trong khoảng từ 0 đến n-1. (n>m)
Chào các bạn!
Mình cần viết hàm để cho ra ngẫu nhiên m số nguyên khác nhau trong khoảng từ 0 đến n-1. Dưới đây là code của mình, mình dùng hàm random_shuffle nhưng cảm giác không được tự nhiên và tối ưu lắm. Các bạn gợi ý giúp mình có cách nào nhanh và hay hơn không ạ? Mình cảm ơn nhiều!
void random_m(int *a, int *b, int n, int m) {
cout << "
n numbers are ";
for (int i = 0; i < n; i++)
{
a[i] = i;
cout << a[i];
}
cout << endl;
random_shuffle(&a[0], &a[n]);
for (int i = 0; i < m; i++)
{
b[i] = a[i];
}
cout << "
random extracting is ";
for (int i = 0; i < n; i++)
{
cout << b[i];
}
cout << endl;
}
Bài liên quan
vậy là tối ưu rồi. Ví dụ chia bài thì cũng xào lên rồi lấy lần lượt từng lá từ trên xuống dưới cũng là lấy m lá bài từ n lá bài vậy.
mà chỗ xuất thì xuất
m
phần tử thôi chứ sao lại cho xuấtn
phần tử.Chỉ lấy m phần tử thì custom thôi.
Ngoài ra còn có cách chọn đúng O(m) mem và O(n) time.