Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ความน่าจะเป็นที่จะได้หัวอย่างน้อย K ในการโยนเหรียญ N ครั้งใน C++


ความน่าจะเป็นคือโอกาสในการได้ผลลัพธ์ที่ต้องการจากชุดข้อมูลที่มีอยู่ ช่วงของความน่าจะเป็นอยู่ระหว่าง 0 ถึง 1 โดยที่จำนวนเต็ม 0 แสดงถึงโอกาสที่เป็นไปไม่ได้ และ 1 แสดงถึงความแน่นอน

ความน่าจะเป็นคืออะไร

ความน่าจะเป็นในวิชาคณิตศาสตร์ทำให้เรามีเครื่องมือที่บอกความไม่แน่นอนของเหตุการณ์และเหตุผล กล่าวอีกนัยหนึ่ง เราสามารถพูดได้ว่าความน่าจะเป็นเกี่ยวข้องกับการคำนวณความน่าจะเป็นของเหตุการณ์ที่กำหนด ซึ่งสามารถแสดงเป็นตัวเลขระหว่าง 1 ถึง 0 ตัวอย่างเช่น ความน่าจะเป็นที่จะได้หัวเมื่อโยนเหรียญที่ไม่เอนเอียงหรือได้ 3 เมื่อทอยลูกเต๋า

ทีนี้ กลับมาที่คำถาม เราต้องหาความน่าจะเป็นที่จะได้หัวอย่างน้อย k ในการโยนเหรียญ N

เช่นเดียวกับที่เรามี 3 เหรียญและ k เป็น 2 ดังนั้นมี 23=8 วิธีในการโยนเหรียญที่เป็น -

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

และชุดที่มีอย่างน้อย 2 หัวคือ −

HHH, HTH, HHT, THH.

ดังนั้นความน่าจะเป็นจะเป็น 4/8 หรือ 0.5

ตัวอย่าง

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

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

แนวทางที่เราจะติดตามเพื่อแก้ปัญหาข้างต้น -

  • เราจะรับ n และ k เป็นข้อมูลเข้า
  • เก็บค่าของแฟคทอเรียลในอาร์เรย์และเรียกใช้เมื่อใดก็ได้ที่จำเป็น
  • ทำการคำนวณ
  • ส่งคืนผลลัพธ์

อัลกอริทึม

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

ตัวอย่าง

#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;
}

ผลลัพธ์

probability is : 0.875
probability is : 0.65625