一个文件含有n个元素,只能遍历一遍要求等概率取出其中之一。

解答:

     抽签,5个人抽取5根签,只有一个签为中签。每个人概率为1/5. 

 

将这n个元素依次遍历,每次得到的数(第L个)取随机数r,r%L==0(0-L之内)

 

var pickOne(file){

  int lenth = 1;

  while(lenth <= file.size){

    if(random()%lenth == 0){

      pick = file[lenth];

    }

    lenth++;

  }

return pick;

}

 

1,2,3,4,5,6,7

第一个数:pick = 1 概率100%;

第二个数:pick被替换为第二个数的概率为1/2,前面的数选到概率为1/2

第三个数:pick被替换为第三个数的概率为1/3,前面的数选到概率为1/2*(1-1/3)

第四个数:pick被替换为第四个数的概率为1/4,之前概率为1/3*(1-1/4)

第n个数:pick被替换为第n个数的概率为1/n

 

转载于:https://www.cnblogs.com/pandans/p/5002031.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值