首页 > 代码库 > 蓄水池抽样Reservior Sampling
蓄水池抽样Reservior Sampling
编程珠玑第12章练习题10:
如何从n个对象(可以依次看到这n个对象,但事先不知道n的值)中随机选择一个?具体说来,如何在事先不知道文本文件行数的情况下读取文件,从中随机选择并输出一行?
解答:我们总选择 第1行,并以概率1/2选择第2行,以概率1/3选择第3行,依次类推,在这一过程结束时,每一行选中的概率是相等的(都是1/n,其中n是文件的总行数)
i = 0;while more input lines with probability 1.0/++i choice = this input lineprint choice
推广:
如何从未知或者很大样本空间随机地取k个数?
for i=k+1:n m = random(1,i); //inclusive if(m<=k) swap(array[m],array[i]);end print array[1:k]
--------------引用http://www.cnblogs.com/HappyAngel/archive/2011/02/07/1949762.html
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。