给你一个长度为N的链表。N很大,但你不知道N有多大。你的任务是从这N个元素中随机取出k个元素
2016-06-07 20:21
127 查看
给你一个长度为N的链表。N很大,但你不知道N有多大。你的任务是从这N个元素中随机取出k个元素。你只能遍历这个链表一次。你的算法必须保证取出的元素恰好有k个,且它们是完全随机的(出现概率均等)。
答案来自网络: 蓄水池抽样:先保存前k个元素,
从第k+1个元素开始, 以1/i (i=k+1, k+2,…,N) 的概率选中第i个元素,并随机替换掉一个已保存的记录,这样遍历一次得到k个元素,可以保证完全随机选取。
答案来自网络: 蓄水池抽样:先保存前k个元素,
从第k+1个元素开始, 以1/i (i=k+1, k+2,…,N) 的概率选中第i个元素,并随机替换掉一个已保存的记录,这样遍历一次得到k个元素,可以保证完全随机选取。
相关文章推荐
- C++ 笔记4:指针函数
- XML.可扩展标记语言.就知道你不知道英文全称
- volley(5) 参数total_remain:totalqty, data:[{ bar_status:XX , bar_code: "XX",bar_remain:XX, bar_whcode:"XX" , bar_prodcode:"XX",bar_id:XX,bar_location: "XX", pr_detail: "XX" , bar_batchcode:method:POST
- 求割边模板(tarjan)
- CentOS 6.5 64位下安装Redis
- 二维数组传递参数问题
- 浅解Linux的启动流程
- C#获取当前行号
- 构造函数
- 13周 阅读程序(2)
- 使用Java编写A*路径规划算法
- tomcat热部署实现文件下载
- 新浪云服务器端安装微擎
- 彻底明白Android中AIDL及其使用
- redis-集群安装(1)
- PowerDesigner表导入oracle 数据库
- 复制构造函数的不同调用
- js中关于IE与DOM对浏览器的兼容性
- 指数函数方法
- Codeforces #3 A Shortest path of the king