ランダムインデックスで配列を検索するときの予想されるループの反復の量
質問
サイズnの配列Aを持っているとします。最初のインデックスとして1と最後のインデックスとしてnがあります。それは値xを含み、xがk回、aは1≦k <= n
である。SOのような検索アルゴリズムがある場合:
while true:
i := random(1, n)
if A[i] == x
break
.
ランダム(A、B)は、AからBへの数値を均一に選択します。
これからXを見つけてプログラムを終了させる機会は、各反復でK / Nです。しかし、私が知っておくべきことは、反復回数またはより具体的にはアレイが上記のように配列Aを与えられた回数の数の期待値となるでしょう。
解決
$ n $ gemetric r.vになりましょう。これは、要素を検索するためにアレイがアクセスされた回数、 $ a [x] $ を見つけるまで、それを見つけるまで。 $ \ mathbb {e} [n] $ を知りたいです。
whidループの反復をIID Bernoulli Trialsのシーケンスとして表示することができます。障害の数学コンテナ "> $ Q= 1 - P $ 。質問を考えると、要素を見つけたい「成功」を得るために必要な試行を知りたいのですが、 $ a [x] $ によってwhile
ループが終了します。 。
$ \ pr \ {n= k \}= q ^ {k-1} p $ 、その $ \ mathbb {e} [n]=sum \ limits_ {k= 1} ^ \ infty k \:q ^ {k-1} p $ 。
このように、 $ \ mathbb {e} [n]=dfrac 1p $ ここで、 $ p=dfrac kn $ so $ \ mathbb {e} [n]=dfrac nk $ 。SO平均で、 $ \ dfrac nk $ アクセス前に $ a [x] $ 。
所属していません cs.stackexchange