一串巨长的数据流中等概率的取出m个数,空间复杂度限制

来源:互联网 发布:mac的照片 编辑:程序博客网 时间:2024/05/22 03:09

只需要m+1个空间;

假设已经输入n个数,取一个m长数组保留m个数,假设每个数概率已为m/n;


此时再输入第n+1个数;

产生一个(1~n+1)随机数,若落在1~m区间内,则留下次数,替换数组中t=(1~m中随机数)位置的数;

若落在m+1~n+1区间内,则不保留次数,则如此处理后得到的数组m即为要求的m个数;


因为:

第n+1个数留下概率为m/n+1;

前n个数中被留下的概率:{(n+1-m)/(n+1)+m/(n+1)*m-1/m}*m/n=m/n+1

原创粉丝点击