ในปัญหานี้ เราได้รับค่าสี่ค่า p, q, r, s งานของเราคือ หาความน่าจะเป็นที่ผู้เล่นชนะเมื่อทราบความน่าจะเป็นการยิงถูกเป้า
ที่นี่ เรามีผู้เล่นสองคนที่เล่นเกมยิงธนู ความน่าจะเป็นของผู้เล่น 1 ยิงถูกเป้าถูกกำหนดเป็น p/q ความน่าจะเป็นของผู้เล่น 2 ยิงถูกเป้าถูกกำหนดเป็น r/s เราต้องหาความน่าจะเป็นของผู้เล่น 1 ชนะเกม
มาดูตัวอย่างเพื่อเข้าใจปัญหา
Input
p = 3, q = 5, r = 2, s = 5
Output
0.789
วิธีแก้ปัญหา
วิธีนี้ต้องการความรู้เกี่ยวกับความน่าจะเป็น
เนื่องจากไม่มีขีดจำกัดสูงสุดของจำนวนครั้งที่ผู้เล่นได้โอกาสยิงเป้า ทั้งสองสามารถยิงถูกเป้าได้ไม่จำกัดจำนวนครั้ง ทำให้การคำนวณสถานการณ์ชนะเป็นอิสระจากจำนวนการทดลอง
ดังนั้น
สมมติความน่าจะเป็นผู้เล่น 1 ยิงถูกคือ P1 = p/q ทำให้ความน่าจะเป็นพลาดคือ 1 - p/q
สมมติความน่าจะเป็นผู้เล่น 2 ยิงถูกคือ P2 = r/s ทำให้ความน่าจะเป็นพลาดคือ 1 - r/s
ตอนนี้ สำหรับจำนวนการทดลองอนันต์ ความน่าจะเป็นผู้เล่น 1 ชนะคือ
win(P1) + (lost(P1)*lost(P2)*win(P1)) + (lost(P1)*lost(P2)*lost(P1)*lost(P2)*win(P1)) + ...
ซึ่งสามารถเขียนในรูปสูตรได้ว่า
P1 + ((1 - P1)*(1 - P2)*(P1)) + ((1 - P1)*(1 - P2)*(1 - P1)*(1 - P2)*(P1)) ...
นี่คืออนุกรมเรขาคณิตอนันต์ โดยที่
A = P1 R = [(1 - P1)*(1 - P2)]
ผลรวมจะเป็น
S = A / (1 - R) เนื่องจาก R น้อยกว่า 1
$$S=\frac{\frac{p}{q}}{1-(1-\frac{p}{q})*(1-\frac{r}{s})}$$
โปรแกรมแสดงการทำงานของวิธีแก้
ตัวอย่าง
#include <iostream>
using namespace std;
double calcWinningPropP1(double p, double q, double r, double s){
return (p / q) / (1 - ( (1 - (p/q)) * (1 - (r/s)) ) );
}
int main() {
double p = 3, q = 5, r = 2, s = 5;
cout<<"The probability of player 1 winning is "<<calcWinningPropP1(p, q, r, s);
return 0;
}
ผลลัพธ์
The probability of player 1 winning is 0.789474