给定一个数据流,其中包含无穷尽的搜索关键字(比如,人们在谷歌搜索时不断输入的关键字)。如何才能从这个无穷尽的流中随机的选取1000个关键字?

 

定义长度为1000的数组。

对于数据流中的前1000个关键字,显然都要放到数组中。

对于数据流中的的第n(n>1000)个关键字,我们知道这个关键字被随机选中的概率为 1000/n。所以我们以 1000/n 的概率用这个关键字去替换数组中的随机一个。

因为此时对于第n个关键字,它被选中的概率为:1000/n=p.
而对于前面n-1个关键字来说,可以分成2步:

  • 第一步,先在n-1个关键字中,被选q=1000/n-1的概率选为n-1中的1000个。
  • 第二步,在这1000个与第n个中选择1000个数字。

所以前n-1个被选中的概率为:1000/n-1 * [999/1000 * 1000/n + (1-1000/n)] = 1000/n.

综上所述
这样就可以保证所有关键字都以 1000/n的概率被选中。

对于后面的关键字都进行这样的处理,这样我们就可以保证数组中总是保存着1000个随机关键字

证明:

使用归纳法证明

相关文章:

  • 2021-12-14
  • 2022-01-10
  • 2021-07-19
  • 2022-12-23
  • 2022-12-23
  • 2021-11-02
  • 2021-12-23
  • 2021-12-23
猜你喜欢
  • 2021-06-08
  • 2021-12-24
  • 2022-02-24
  • 2021-05-16
  • 2022-12-23
  • 2021-05-09
相关资源
相似解决方案