これがDave の fix の正しさの証明です。一般性を失うことなく、ストリームが であると仮定します1..n
。ループを反復した後、サンプルがの一様なランダムな組み合わせのm in {0..n}
との交点として分布することを帰納的に証明します。1..m
k
1..n
基本ケースm = 0
は自明です: サンプルと交差の両方が常に空です。特定の の帰納的仮説が与えられたm
ので、 についてそれを証明しm+1
ます。を反復S
後の集合を表す確率変数とし、反復後の集合を表す確率変数を とします。交差点を設定しましょう。すべての-combinationについて、次のように書きますm
S'
m+1
&
k
T
Pr(S' = T & {1..m+1})
= Pr(S = T & {1..m}) Pr(S' = T & {1..m+1} | S = T & {1..m}),
S' = T & {1..m+1}
であることを意味するのでS = T & {1..m}
。帰納的仮説といくつかのカウントにより、
(n choose k) Pr(S = T & {1..m})
= ((n - m) choose (k - |T & {1..m}|)).
2 つの方程式を組み合わせると、次のようになります。
(n choose k) Pr(S' = T & {1..m+1})
= ((n - m) choose (k - |T & {1..m}|)) Pr(S' = T & {1..m+1} | S = T & {1..m}).
Dave のプログラムを調べてみると、
Pr(m+1 in S' | S) = (k - |S|) / (n - m).
現在、2つのケースがあります。最初のケースはm+1 in T
.
Pr(S' = T & {1..m+1} | S = T & {1..m})
= Pr(m+1 in S' | S = T & {1..m})
= (k - |T & {1..m}|) / (n - m)
(n choose k) Pr(S' = T & {1..m+1})
= ((n - m) choose (k - |T & {1..m}|)) (k - |T & {1..m}|) / (n - m)
= (n - m - 1) choose (k - |T & {1..m}| - 1)
= (n - (m+1)) choose (k - |T & {1..m+1}|).
2番目のケースはm+1 not in T
.
Pr(S' = T & {1..m+1} | S = T & {1..m})
= Pr(m+1 not in S' | S = T & {1..m})
= (n - m - (k - |T & {1..m}|)) / (n - m)
(n choose k) Pr(S' = T & {1..m+1})
= ((n - m) choose (k - |T & {1..m}|)) (n - m - (k - |T & {1..m}|)) / (n - m)
= (n - m - 1) choose (k - |T & {1..m}|)
= (n - (m+1)) choose (k - |T & {1..m+1}|).
Pr(S' = T & {1..m+1})
どちらの場合も、が正しい値であることを証明します。