码迷,mamicode.com
首页 > 其他好文 > 详细

蓄水池抽样Reservior Sampling

时间:2014-08-05 13:28:19      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   文件   for   ar   

编程珠玑第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 line
print choice

bubuko.com,布布扣

推广:

如何从未知或者很大样本空间随机地取k个数?

for i=k+1:n
   m = random(1,i);  //inclusive
   if(m<=k)
     swap(array[m],array[i]);
end 
print array[1:k]

bubuko.com,布布扣

 

                       --------------引用http://www.cnblogs.com/HappyAngel/archive/2011/02/07/1949762.html

蓄水池抽样Reservior Sampling,布布扣,bubuko.com

蓄水池抽样Reservior Sampling

标签:style   blog   http   color   io   文件   for   ar   

原文地址:http://www.cnblogs.com/scofield0li/p/3891751.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!