avatar
请教一道题目# JobHunting - 待字闺中
c*o
1
在glassdoor上看到一道题目:
Given a file of unknown size, devise an algorithm to give equal probability
randomization to choosing a single line given a one line buffer space.
请教思路?
avatar
r*u
2
这个刚有人总结过,我copy&paste。
要求从N个元素中随机的抽取1个元素, 其中N无法确定(数据流)。
int Num;
int i = 0;
int choose = 0;
while(scanf("%d", &Num)&& Num != 0){
   if (((double)rand()/(double)RANDOM_MAX) < (1.0 / (double)++i))
      choose = Num;
}
cout << choose <总是选择第一行, 二分之一几率选择第二行, 以此类推, K分之一机率选择第K行,
当while 执行完毕,假设N个数字,则每个数字被选择的机率均为1/N
第一行被选择的机率为:
1 * 1/2 * 2/3 * 3/4 *.... (N-1)/N = 1/N
第K行被选择的机率为:
1/K * K/(K+1) * .... (N-1)/N = 1/N

probability

【在 c*****o 的大作中提到】
: 在glassdoor上看到一道题目:
: Given a file of unknown size, devise an algorithm to give equal probability
: randomization to choosing a single line given a one line buffer space.
: 请教思路?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。