Kết quả tìm kiếm với tag ""

Lấy ngẫu nhiên theo một xác suất cho trước

Thường trong các ngôn ngữ lập trình đều cung cấp các hàm trả về một số ngẫu nhiên (c, c++: rand(); .NET: class System.Random; Java: class java.util.Random; php: rand(); javascript: Math.random() …). Các số ngẫu nhiên trả về có xác suất trải đều từ min-value đến max-value.
Nếu bạn muốn lấy về một số ngẫu nhiên từ min-value đến max-value mà theo một xác suất cho trước thì bạn có thể làm như sau:

Giả sử cần lấy ngẫu nhiên từ 1 đến 4: A = [1, 2, 3, 4] sao cho xác suất lấy ra 1, 2, 3, 4 lần lượt là P = [10%, 20%, 40%, 30%].
Cách làm:
- Dùng hàm lấy ngẫu nhiên một số x từ 0 đến 99 (=SUM(P)-1).
- Xem xem x nằm trong khoảng nào của P thì trả về vị trí của nó tương ứng với số cần tìm.

Ví dụ:
x = 7 –> 1
x = 25 –> 2
x = 35 –> 3
x = 68 –> 3
x = 76 –> 4

Mẫu viết bằng javascript

var a = [1, 2, 3, 4];
var p = [10, 20, 40, 30];
var sum = 0;
for (var i = 0; i < p.length; i++) sum += p[i];
var x = Math.random() * sum; // do Math.random() trả về số ngẫu nhiên lớn hơn hoặc bằng 0 và nhỏ hơn 1
sum = 0;
for (var i = 0; i < p.length; i++) {
	sum += p[i];
	if (x < sum) return a[i];
}

Kỹ thuật lấy n bản ghi ngẫu nhiên

Giả sử cần lấy 10 bản ghi ngẫu nhiên để hiển thị thành 1 page trên website: