编程珠玑第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
推广:
如何从未知或者很大样本空间随机地取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
蓄水池抽样Reservior Sampling
时间: 2024-11-05 19:27:58