パワーマンハッタン大学チャレンジの排出確率とアルゴリズム
注意: 生成される文字列についてのネタバレを含みます。
注意: 2022/07/14 現在のアルゴリズムです。
排出確率は約 0.2% です。
i 番目の文字を決定するときに、 i 番目の文字に近い文字を選びやすくなるようになっている。
数学的に言うと i を中心とする分散 1,5 の正規乱数により i 番目の文字を決定している。
i 番目の文字の生起確率の確率密度分布を示したものが図1である。
図1: 文字ごとの生起確率
例えば1文字目の生起確率は青色の曲線に示されており、「パ」の出現確率が一番高いことがわかる。
なお、範囲外の乱数が生成された場合は再抽選されるため、該当の文字の出現確率は端の方が高くなる。
この分布を離散化する際に、絶対値の切り捨てを行っている。
すなわち $x$ の絶対値の切り捨ては $x \geq 0$ のときは通常の切り捨て $\lfloor x \rfloor$ であるが、 $x < 0$ のときは $-\lfloor -x \rfloor$ となる。
「ー」の文字について離散化を行った後の確率分布を図2に示す。
図2: 「ー」の文字を離散化した確率分布
もとの正規乱数の確率密度関数が緑で示されているのに対し、各文字の正規確率の離散分布が青色で示されている。
なお、もとの正規乱数の確率密度関数は再抽選を考慮した後の値である。
さらに「ン」が選択され、その前の2文字が「ーマ」または「ッタ」の場合一定確率で「ソ」に置き換わるようになっている。
いくつかあるパターンの中から、「大学」が最も高い確率で選択されるようになっている。
数学的には自由度1のカイ二乗分布のスケールを $1/1.5$ 倍した分布に従う乱数によって選択される。
1文字目を例として考える。
「パ」の選択の際に生成した乱数を確率変数 $X \sim N(0, 1.5)$ と表すと、 $X$ が再生成されない範囲にあるためには $sgn(X) \lfloor |X| \rfloor + 0 \in [0, 8]$ すなわち $X \in (-1, 9)$ であればよい。
正規分布の累積密度関数を $\Phi(x; \mu, \sigma)$ と表すと、 $Pr(X \in (-1, 9)) = \Phi(9, 0, 1.5) - \Phi(-1, 0, 1.5) \simeq 0.75$ である。
また、 $sgn(X) \lfloor |X| \rfloor = 0$ すなわち $X \in (-1, 1)$ である確率は $Pr(X \in (-1, 1)) = \Phi(1, 0, 1.5) - \Phi(-1, 0, 1.5) \simeq 0.50$ である。
したがって1文字目に「パ」が選ばれる確率は $Pr(X \in (-1, 1)) / Pr(X \in (-1, 9)) \simeq 0.67$ である。
同様に考えると、 $i$ 文字目に「パワーマンハッタン大学」の $i$ 文字目が選ばれる確率 $p_i$ は $p_i = Pr(X \in (-1, 1)) / Pr(X \in ( - i - 1, 9 - i))$ である。
ただし、 $i=0$ を最初の文字とする。
計算結果の $p_i$ は次の表のようにまとめられる。
$i$
$p_i$
0
0.662
1
0.545
2
0.507
3
0.497
4
0.495
5
0.497
6
0.507
7
0.545
8
0.662
次に、各文字が「ソ」へ変化しない確率は $Pr(Y < 1), Y \sim \chi^2(1) / 1.5$ である。
したがって $Pr(Y < 1) \simeq 0.78$ である。
以上より、「パワーマンハッタン」が生起する確率は
$$
\left( \prod_i p_i \right) Pr(Y < 1) ^ 2 \simeq 0.0041 \times 0.78^2 \simeq 0.0024
$$
すなわち 0.24% 程度である。
「大学」の生起確率は「ソ」に変化しない確率と同じである。
したがって、「パワーマンハッタン大学」の生起確率は $0.0041 \times 0.78^3 \simeq 0.0019$ となり、約 0.2% である。
1000000 回生成して文字ごとの出現確率を調べた。
結果は ./test-log.txt に記されている。注意すべき点として、「ン」は「パワーマンハッタン大学」の中に複数含まれているため、生起確率はその合計値が記されている。
これを見ると、計算した生起確率と結果が一致していることがわかる。