【C++】ターゲット命中確率が与えられたときのプレイヤーの勝利確率を求める方法
この問題では、4つの値 p、q、r、s が与えられ、ターゲットへの命中確率が分かっている場合に、プレイヤーが勝利する確率を求めることが課題となります。
ここでは、2人のプレイヤーがアーチェリー競技を行っているとします。プレイヤー1がターゲットに命中する確率は p/q、プレイヤー2が命中する確率は r/s として定義されます。求めたいのは、プレイヤー1がこのゲームに勝つ確率です。
それでは、具体例を使って問題を確認しましょう。
入力
p = 3, q = 5, r = 2, s = 5
出力
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)
公比 R は 1 未満であるため、無限等比級数の和 S は次の公式で求められます。
S = A / (1 − R)
したがって、プレイヤー1が勝利する確率は次の式で表されます。
S = (p/q) ÷ { 1 − (1 − p/q) × (1 − r/s) }
解法の実装例(C++)
#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
計算の結果、プレイヤー1が勝利する確率は約 0.789(78.9%)であることが分かります。このように、無限等比級数の和の公式を活用することで、試行回数に上限のないゲームの勝利確率でも、効率よく正確に求めることが可能になります。
-
マルコフ連鎖における特定時刻の状態到達確率を求めるC++プログラム
本記事では、マルコフ連鎖(Markov Chain)において、初期状態から出発し、指定された時間が経過した時点で特定の状態へ到達する確率を求めるC++プログラムについて解説します。 マルコフ連鎖とは マルコフ連鎖とは、複数の「状態」と、ある状態から別の状態へ遷移する際の「遷移確率」から構成される確率過程(ランダムプロセス)です。状態間の遷移には単位時間が1単位かかるものとします。マルコフ連鎖の重要な特徴は、「次の状態」が現在の状態のみによって決まり、それ以前の履歴に依存しないというマルコフ性を持つ点です。 マルコフ連鎖は有向グラフとして表現できます。この問題を解くには、与えられたマルコフ連鎖
-
指定された点を覆う最適な長方形を見つけるC++プログラム
はじめに この記事では、指定された点を覆う「最適な長方形」を見つけるためのC++プログラムについて詳しく解説します。 問題の概要 この問題では、ある点の座標 (x, y) と、長さと幅の比 l/b が与えられます。求めるのは、次の条件をすべて満たす長方形の座標です。 与えられた点を内部に含んでいること 寸法が指定された比率 l : b に従っていること 条件を満たす長方形が複数存在する場合は、その中心と与えられた点とのユークリッド距離が最も短いものを選択します。 アルゴリズムのアプローチ この問題は、以下の手順で解くことができます。 比率の最小化: 最大公約数(GCD)を用いて比率