有一个很大很大的输入流,大到没有存储器可以将其存储下来,
而且只输入一次,如何从这个输入流中随机取得m 个记录。
ANSWER
而且只输入一次,如何从这个输入流中随机取得m 个记录。
ANSWER
That is, keep total number count N. If N<=m, just keep it.
For N>m, generate a random number R=rand(N) in [0, N), replace a[R] with new number if R falls in [0, m).
这里可以推倒出每个记录被选中的概率都是m/n
可以这推倒:
当N=m+1;
前面的选中概率是: 1*(1/m+1)+(m/m+1)*(m-1/m)=m/m+1
最后一个选中概率是:m/m+1
所以都是m/N