Computer >> Máy Tính >  >> Lập trình >> C ++

Xác suất nhận được ít nhất K cái đầu trong N lần tung đồng xu trong C ++

Xác suất là cơ hội nhận được đầu ra mong muốn từ tập dữ liệu có sẵn. Phạm vi xác suất nằm trong khoảng từ 0 đến 1 trong đó số nguyên 0 cho thấy khả năng không thể xảy ra và 1 cho thấy sự chắc chắn.

Xác suất là gì?

Xác suất trong toán học cung cấp cho chúng ta những công cụ cho biết sự không chắc chắn của các sự kiện và lý do. Nói cách khác, chúng ta có thể nói xác suất đề cập đến việc tính toán khả năng xảy ra một sự kiện nhất định, có thể được biểu thị bằng một số từ 1 đến 0. Ví dụ:xác suất nhận được đầu khi tung đồng xu không thiên vị hoặc nhận được 3 khi một con xúc xắc được tung.

Bây giờ, quay lại câu hỏi, chúng ta phải tìm xác suất để có ít nhất k đầu trong N lần tung đồng xu.

Giống như chúng ta có 3 đồng xu và k là 2, vậy có 23 =8 cách tung đồng xu -

HHH, HTH, HHT, HTT, THH, THT, TTT, TTH.

Và các bộ chứa ít nhất 2 đầu là -

HHH, HTH, HHT, THH.

Vì vậy, xác suất sẽ là 4/8 hoặc 0,5.

Ví dụ

Input: k = 1, n = 3
Output: 0.875

Input: k = 3, n = 6
Output: 0.65625

Phương pháp tiếp cận mà chúng tôi sẽ theo dõi để giải quyết vấn đề trên -

  • Chúng tôi sẽ lấy n và k làm đầu vào.
  • Lưu trữ giá trị của giai thừa trong một mảng và gọi nó bất cứ khi nào nó được yêu cầu.
  • Thực hiện phép tính.
  • Trả lại kết quả.

Thuật toán

Step 1-> declare function to calculate the probability of getting at least k heads in n tosses
   double probability(int k, int n)
   Declare and set double check = 0
   Loop For i = k and i <= n and ++i
      Set check += temp[n] / (temp[i] * temp[n - i])
   End
   Call check = check / (1LL << n)
   return check
Step 2-> declare function to precompute the value
   void precompute()
   Set temp[0] = temp[1] = 1
   Loop For i = 2 and i < 20 and ++i
      Set temp[i] = temp[i - 1] * i
Step 3-> In main
   Call precompute()
   Call probability(1, 3)
Stop

Ví dụ

#include<bits/stdc++.h>
using namespace std;
#define size 21
double temp[size];
// calculate probability of getting at least k heads in n tosses.
double probability(int k, int n) {
   double check = 0;
   for (int i = k; i <= n; ++i)
   check += temp[n] / (temp[i] * temp[n - i]);
   check = check / (1LL << n);
   return check;
}
void precompute() {
   temp[0] = temp[1] = 1;
   for (int i = 2; i < 20; ++i)
   temp[i] = temp[i - 1] * i;
}
int main() {
   precompute();
   // Probability of getting 1 head out of 3 coins
   cout<<"probability is : "<<probability(1, 3) << "\n";
   // Probability of getting 3 head out of 6 coins
   cout<<"probability is : "<<probability(3, 6) <<"\n";
   return 0;
}

Đầu ra

probability is : 0.875
probability is : 0.65625