前几天听到同事面试的时候问了蓄水池抽样问题,以前也听过这个问题,但是也没有自习思考过这个问题,一时间也想得不是很清楚这个问题,就花了一点时间看了一些,这里做一个记录,也让自己以后想起的时候有一个回忆的地方。
什么是蓄水池抽样问题呢?
先来看一下维基百科的解释:
Reservoir sampling is a family of randomized algorithms for randomly choosing a sample of k items from a list S containing n items, where n is either a very large or unknown number. Typically n is large enough that the list doesn’t fit into main memory.
也就是从n个元素中随机地选择出k个元素,需要满足每个元素被选择出来的概率是一样的,同时这里的n预先是未知的,每一次接收输入的时候选择的时候都需要使每个数被选择出来的概率相等。