C/C++で理解する条件付き確率とベイズの定理の基本
条件付き確率とは、P(A|B) のように表記され、「事象Bがすでに起こった」という条件下で、事象Aが起こる確率のことを指します。
条件付き確率の公式は以下の通りです。
P(A|B) = P(A∩B) / P(B)
ベイズの定理とは
ベイズの定理は、相互に依存する事象同士の確率の関係を示す公式です。つまり、ある事象が起こったことを知ったとき、それがもう一方の事象の確率にどう影響するか(条件付き確率の関係)を表します。
事象Aと事象Bがあるとき、ベイズの定理によれば次の式が成り立ちます。
P(A|B) = {P(B|A) × P(A)} / P(B)
ベイズの定理の導出
ここでは、条件付き確率の公式を使ってベイズの定理を導出してみましょう。
まず、条件付き確率の定義から次の2つの式が得られます。
P(A|B) = P(A∩B) / P(B) ……① P(B|A) = P(B∩A) / P(A) ……②
A∩B と B∩A は同じ集合を表すため、②の B∩A を A∩B に置き換えることができます。
P(B|A) = P(A∩B) / P(A) P(B|A) × P(A) = P(A∩B) ……③
この③で求めた A∩B の値を①に代入すると、ベイズの定理の公式が導かれます。
P(A|B) = {P(B|A) × P(A)} / P(B)
積の法則(Product Rule)
③の式は「積の法則」と呼ばれ、同一の試行において2つの事象が同時に起こる確率は、「一方の事象の条件付き確率」と「証拠となる事象の発生確率」の積に等しいことを意味します。
P(A∩B) = P(A|B) × P(B)
積の法則から導かれる重要な性質
この法則から、次の2つの重要な公式を導くことができます。
1. A⊆B の場合(AがBの部分集合、つまり集合Aのすべての要素が集合Bに含まれる場合):
P(A∩B) = P(A)、したがって P(A|B) = P(A) / P(B)
2. B⊆A の場合(BがAの部分集合、つまり集合Bのすべての要素が集合Aに含まれる場合):
P(A∩B) = P(B)、したがって P(A|B) = 1
3つ以上の事象への拡張
相互に依存する事象が3つ以上存在する場合、それらの条件付き確率には次のような関係が成り立ちます。
P(X1|Y) = P(X1) × P(Y|X1) / [P(X1) × P(Y|X1) + P(X2) × P(Y|X2) + P(X3) × P(Y|X3) + …]
この一般化された形は、スパムフィルタや診断システムなど、複数の仮説の中から最も可能性の高いものを選ぶ場面で広く活用されています。
-
C/C++でn番目のカタラン数を求めるプログラム
カタラン数(Catalan numbers)とは、組み合わせ論におけるさまざまな数え上げ問題に現れる自然数の数列です。特に、再帰的に定義される対象の個数を数える場面で頻繁に登場することで知られています。カタラン数の主な性質ディック語(Dyck word)との関係Cn は、長さ 2n のディック語の総数を表します。ディック語とは、n 個の X と n 個の Y から構成され、文字列のどの先頭部分を見ても Y の数が X の数を超えない文字列のことです。例えば、長さ 6 のディック語は次の通りです。XXXYYY XYXXYY XYXYXY XXYYXY XXYXYY.正しい括弧の対応付けX を開き
-
C++で解くチェス盤上のナイトが盤内に残る確率の求め方
問題概要 N×Nのチェス盤があるとします。ナイトはr行c列目のマスからスタートし、ちょうどK回の移動を試みます。行と列は0始まりのインデックスで表されるため、左上のマスは(0, 0)、右下のマスは(N-1, N-1)となります。 ナイトは1つのマスから8種類の異なるマスへ移動することができます。その移動パターンは下図の通りです。 ナイトは移動のたびに、8つの可能な移動の中からランダムに1つを選択します。そして、ちょうどK回の移動を完了するか、チェス盤の外に出てしまうまで移動を続けます。この問題では、ナイトが移動を終えた時点で盤上に残っている確率を求めます。 例えば、入力が「3, 2, 0,