N行中等概率抽取M行的解法
来源:互联网 发布:java中毫秒微秒纳秒 编辑:程序博客网 时间:2024/05/29 08:34
题目是这样子的:
有一个文本,事先不知道数据行数,要求等概率抽出1000行来,只准读1遍(即表示你对每一行的选择是二维的,要么要,要么不要,如果选择不要这一行那么再没有机会选择这一行了)
题目主要有两个难点,一个是保证等概率,另一个是对于当前行是要还是不要呢
这个题目的解法目前我只知道以下这种,如果你知道更多的解法,欢迎留言讨论
解法:
- 假设:i为当前记录序号,S所有采样,要求采样的数量为n,i = 1,2,3...
- 1. 当i <= n的时候,都放到S
- 2. 当i>n的时候,每次生成[1, i]均匀分布的随机数r,如果1<=r<=n,就用当前记录i替换掉S中第r个记录
那么对于该解法的证明如下
- A. 首先,假设当前S中的样本都是符合题目要求的 那么显然,每个新到的记录有n/i的概率被选中,符合题目要求(题目要就就是一共有m个元素的话,那么每个元素被选中的概率都应该是n/m)
- B. 再看之前就在S中的记录,因为假设符合要求,那么S中的一个元素,在i到来之前,是以 n/(i-1)的概率选出的,i到来后,它被抽到去掉的概率是1/i,那么保留的概率是(i-1)/i,这样最终它在S中的概率就是(n/(i-1)) * ( (i-1)/i) = n/i
- N行中等概率抽取M行的解法
- 从一整数数组中等概率抽取m个不重复的数
- 其他题目---从N个数中等概率打印M个数
- 从N个不同数字中等概率取出M个数字(N>=M)
- Tricks(二十)—— 从 N 个数中等概率地产生 M 个数
- 一串巨长的数据流中等概率的取出m个数,空间复杂度限制
- m的n次幂的几种解法
- 第21题:求1~n序列中等于m的所有组合
- [算法实现]选择n次(n≥M), 能集齐M种卡片的概率是多大?
- 查询m到n行的数据
- 组合问题:输出从m个数中的任意抽取n个数的组合全部可能序列
- nyoj 19 擅长排列的小明 【全排列(n中抽取m个数)】
- [概率]m个球扔到n个盒子
- excel sheet的 某列(m*n行) 快速复制到 m行n列区域
- 按概率返回0-N之间的数字的解法思想
- 取n到m行
- 第二类斯特林数(M个数分成N组的所有解法)
- Leetcode Median of two sorted arrays 的非递归O(m+n) C语言解法
- shell中自动输入来跳过人机交互界面
- 黑马程序员之C# 学习笔记:进程,线程具体定义区别。
- 稀疏表示step by step
- typeof关键字
- iptables(linux防火墙) 使用
- N行中等概率抽取M行的解法
- <每日一句英语> 2012-10-11
- JAVA泛型编程笔记
- Android传感器概述(二)
- 飞鸽传书的通信协议设计思路
- 身份验证
- Guide: Uninstall AVG Internet Security 2012
- 服务器注意防火墙不要限制端口,不要限制协议
- 沉心