您的位置:首页 > 其它

一个n个整数序列取m个数,使其概率相同问题

2012-11-06 23:54 204 查看
转:http://blog.csdn.net/jay1002008/article/details/6877914

 这是今天上午在同济笔试百度的题目,当时没做出来,那个郁闷,现把思路放在此处纪念已逝的笔试。

        原题大概是这样的:一个服务器一天内会收到很多request,但是服务器只能存放m个request,试设计一种算法,使得在时时的reqest中选择m个保存,并保证最后各个request被选中的概率为大致相同。记住,不到最后,不知道request的总数n.

         其实,这个题目可以这样解:

         前m个request依次放入服务器中,当第m+1个来临时,以m/(m+1)的概率选中,并在已保存的m个request中等概率选择一个替换之。当第m+2个来临时,以

m/(m+2)的概率选中,并在已保存的m个request中等概率选择一个替换之。  依次类推,第N个request以m/N的概率被选择,并在已保存的m个request中等概率选择一个替换之。最终每个request被选择的概率为m/n.

         证明如下(数学归纳法):

         当n=m+1时,第m+1选中的概率为m/(m+1),而第一个被选中的概率为:1/(m+1) + m/(m+1) * (m-1)/m = m/(m+1);

         假设当n = N时,每个request被选择的概率为m/N;

         现证明当n = N+1时,每个request被选择的概率为m / (N+1).

         第N+1个被选中的概率当然为m/(N+1),而第一个request被选择的概率为:m/N * ( (N+1-m)/(N+1) + m/(N+1) * (m-1)/m =  m / (N+1);其余request被选择的概率也一样,得证当n = N+1时,每个request被选择的概率为m / (N+1)。

          

         综上得,第方法可以实现最最终每个request被选择的为m/n.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐