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

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

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

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

扩展

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

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

  

原文地址:https://www.cnblogs.com/tekkaman/p/2966845.html