从不断更新query日志的字符串流中随机选择一个字符串?10000个字符串呢?

地址:http://www.cnblogs.com/tekkaman/archive/2013/03/18/2966845.html


从字符串流中随机选择一个字符串

  解题的核心是在幸存的字符串中挑选,并在过程中不断更新。

  你打开文件并保存第一个字符串,此时有了一个备选字符串,并有100%的可能性选中它。保存这个字符串,继续读入下一个字符串,这样就有了2个备选字符串,选中每个的可能性都是50%。选中其中之一并保存,然后丢弃另一个。再读入下一个字符串,按照新字符串的33%原先幸存字符串67%的概率,在两者之间选择一个,然后保存新选中的字符串。

扩展

  如何从字符串流中随机选取1000个字符串。

  对于数据流中的前10000个关键字,显然都要放到数组中。 
  对于数据流中的的第n(n>10000)个关键字,我们知道这个关键字被随机选中的概率为10000/n。所以我们以10000/n的概率用这个关键字去替换数组中的随机一个。这样就可以保证所有关键字都以10000/n的概率被选中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值