Bài toán Sinh giá trị Ngẫu nhiên | MicrosoftTech.Net

Bài toán Sinh giá trị Ngẫu nhiên

1. Hàm sinh ngẫu nhiên trong csharp
Trong lập trình csharp hỗ trợ đối tượng random để sinh ngẫu nhiên một giá trị số nguyên, đi kèm là phương thức .Next(); để sinh giá trị ngẫu nhiên theo điều kiện nhất định. Phương thức .Next() được overload thành 3 dạng như ví dụ bên dưới.

  • Dạng thứ nhất: Sinh ngẫu nhiên một giá trị số nguyên int. Số nguyên int trong lập trình csharp có giá trị từ 0 -> 2^31-1. (2^31-1 = 2148486647)
  • Dạng thứ hai: Sinh ngẫu nhiên một giá trị số nguyên từ 9 đến giá trị cho trước.
  • Dạng thứ ba: Sinh ngẫu nhiên một giá trị số nguyên trong khoảng 2 số nguyên cho trước.

Khởi tạo Giá trị ngẫu nhiên trong  Csharp | MicrosoftTech.Net
2. Sinh ngẫu nhiên một dãy số tăng dần
Trong ví dụ này ta sẽ sinh một mảng số nguyên 1 phần tử có giá trị tăng dần. Phương pháp: Phần tử đầu tiên sẽ được sinh ngẫu nhiên, các phần tử tiếp theo sẽ bằng phần tử trước đó cộng thêm một lượng ngẫu nhiên; Như vậy đảm bảo phần tử sau sẽ luôn lớn hơn phần tử cho trước. Ngược lại nếu muốn sinh một dãy giảm dần, trước tiên ta sinh một dãy tăng sau đó tiến hành reverse để có dãy giảm dần. Nếu như làm theo phương pháp phần tử sau bằng phần tử trước trừ đi một lượng ngẫu nhiên thì dễ xảy ra trường hợp sinh ra ra số âm.
Khởi tạo Giá trị ngẫu nhiên trong  Csharp | MicrosoftTech.Net
Một kết quả của dãy tăng ngẫu nhiên
Khởi tạo Giá trị ngẫu nhiên trong  Csharp | MicrosoftTech.Net
3. Sinh ngẫu nhiên theo tỷ lệ cho trước
Chắc hẳn bạn đang tự hỏi tại sao đã sinh ngẫu nhiên lại còn theo tỷ lệ, và làm sao có thể khống chế giá trị theo tỷ lệ được. Ta thấy, giả sử dụng random.Next(1,11) để sinh 10 phần tử từ 1 -> 10; Nếu xét trên tập hợp kết quả lớn (từ vài trăm phần tử trở lên) ta thấy mỗi giá trị từ 1 -> 10 đều có tỷ lệ xuất hiện xấp xỏ 10%. Như vậy nếu sinh ngẫu nhiên trên số lượng phần tử lớn thì xác suất của mỗi phần tử là như nhau. Đến đây nếu kết hợp các lệnh điều kiện thích hợp thì ta hoàn toàn có thể khống chế ngẫu nhiên theo như ý muốn.

Bên dưới ta sẽ xét một ví dụ đơn giản: Sinh ngẫu nhiên 3 giá trị (1, 2, 3) với xác suất. 1: 50%. 2: 25%. 3: 25%.

4. Cách thực hiện
Đầu tiên tại dòng thứ 17 ta sinh ngẫu nhiên 2 giá trị: 1 và 2. Nếu như bằng 1 -> lấy giá trị 1 này. Nếu như bằng 2 thì tiếp tục sinh ngẫu nhiên giá trị 2 và 3. Giá trị 2 và 3 sinh ra sẽ chấp nhận luôn không cần xét thêm gì nữa. Có thể hình dung quy trình theo mô hình này: [1 | ( 2 | 3) ] . Như vậy xác suất của 1 là 50 %, xác suất của 2 và 3 bằng nhau và bằng 25%.

Bên dưới là một ví dụ thực nghiệm với xác suất xấp xỉ: 50 | 25 | 25
Khởi tạo Giá trị ngẫu nhiên trong  Csharp | MicrosoftTech.Net

MicrosoftTech.Net

Bài viết với Chủ đề Liên quan


Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>