转载http://www.cnblogs.com/HappyAngel/archive/2011/02/07/1949762.html
腾讯面试题:一个数据流中,如何采样得到100个数,保证采样得到的100个数是随机的?
问题抽象:要求从N个元素中随机的抽取k个元素,其中N无法确定,而且每个数据只能被读一次。
主要应用场景为数据流,数据量很大,无法保存,还要保证随机抽样。
选一个数从数据流中选取一个数,要求每一个数被选中的概率相等
这道题在编程珠玑上:
How could you select one of n objects at random, where you see the objects sequentially but you do not know the value of n beforehand? For concreteness, how would you read a text file, and select and print one random line, when you don’t know the number of lines in advance?
扩展:选k个数,从数据流中选取K个数,要求随机选取
每次以k/i 的概率选中选中该数,i为当前总数。
参考 蓄水池算法
此外还有:加权分布式蓄水池抽样