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;
}
viết 11:25 ngày 01/10/2018

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ất n phần tử.

rogp10 viết 11:10 ngày 01/10/2018

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.

Bài liên quan
0