这是Dave 修复的正确性证明。不失一般性地假设流是1..n
。我们归纳证明,在m in {0..n}
循环迭代之后,样本分布为 的1..m
均匀随机k
组合的交集1..n
。
基本情况m = 0
是微不足道的:样本和交集始终为空。给定一个特定的归纳假设m
,我们现在证明它m+1
。设S
是表示迭代后集合的随机变量, 设m
是S'
表示迭代后集合的随机变量m+1
。设&
交点。对于所有k
-combinations 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}|)).
结合这两个方程,我们得到
(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}).
通过检查戴夫的程序,
Pr(m+1 in S' | S) = (k - |S|) / (n - m).
现在有两种情况。第一种情况是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}|).
第二种情况是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})
具有正确的值。