蓄水池抽样算法 Leetcode 382

解决方案:定义取出的行号为choice,第一次直接以第一行做为取出行 choice ,然后第二次以二分之一律率决定是否用第二行替换 choice ,第三次以三分之一的几率决定是否以第三行替换 choice ……,以此类推。扩展

这种方法的巧妙之处在于成功的构造出了一种方式使得最后能够证实对每一行的取出几率都为1/n(其中n为当前扫描到的文件行数),换句话说对每一行取出的几率均相等,也即完成了随机的选取。方法

回顾这个问题,咱们能够对其进行扩展,即如何从未知或者很大样本空间随机地取k个数?文件

类比下便可获得答案,即先把前k个数放入蓄水池,对第k+1,咱们以k/(k+1)几率决定是否要把它换入蓄水池,换入时随机的选取一个做为替换项,这样一直作下去,对于任意的样本空间n,对每一个数的选取几率都为k/n。也就是说对每一个数选取几率相等。解决方案

相关文章
相关标签/搜索