質問: 簡単な質問かも知れませんが、自信がないので教えて頂けると幸いです。 32bitの内、26bitが合っている確率はいくつですか。 具体的には、randamに生成される32bitが 10101010101010101010101010101010のうち、26個のbitと同じになる確率はいくつですか。 自分は、(32 - 26)/32 の18.75%だと思うのですが、皆さんはどう思いますか。 教えて頂けると幸いです。
回答: 32ビットのビット列は全部で 2^32 通り あるビット列が与えられたとき、このビット列と26ビットだけ一致する (他の6ビットは一致しない) ビット列は 32C26 通り ※ nCr は 組合せ を表す。 よって、32C26 / 2^32 = 32C6 / 2^32 = 906192 / 4294967296 = 0.00021... = 0.02% 実際、プログラムでシミュレーションすると、計算と同じ結果になります。 ``` import numpy as np length = 32 match_length = 26 N = 1000000 # 長さ length のビット列を N 個ランダムに生成 xs = np.random.randint(0, 2, size=(N, length)) # 長さ length のビット列を1つランダムに生成 y = np.random.randint(0, 2, length) # 1. (xs == y).sum(axis=1) で一致している要素数カウント # 2. 一致しているビット数が match_length の数をカウント # 3. N で割ってその割合を算出 prob = np.sum((xs == y).sum(axis=1) == match_length) / N print(f"{prob:.2%}") # 0.02% ```