蓄水池算法(Reservoir Sampling)是一种用于从大规模数据流中随机抽样的算法。该算法的应用场景包括但不限于数据流分析、随机抽奖、网络抓包等。在本文中,我们将详细介绍蓄水池算法的原理,并提供Python代码实现。
原理介绍
蓄水池算法的目标是从一个含有未知大小的数据流中随机选择k个元素,保证每个元素被选择的概率相等。具体步骤如下:
- 创建一个大小为k的蓄水池(reservoir)用于存储选择的元素。
- 读取数据流中的前k个元素,并依次放入蓄水池中。
- 对于第i个元素(i > k),以k/i的概率决定是否将其放入蓄水池中。
- 如果第i个元素被选择放入蓄水池中,则从蓄水池中随机选择一个元素并替换之。
通过这样的方式,我们可以保证每个元素被选择的概率为k/n,其中n表示数据流中的元素总数。
Python代码实现
下面是使用Python实现蓄水池算法的示例代码:
import random
def reservoir_sampling(stream,