c语言水库抽样算法代码,LeetCode---蓄水池抽样算法
面试的时候被问到这个问题了,一脸懵逼。
问题:从n个元素中随机抽取k个元素,其中N无法确定。
解法:我们总是选择第一个对象,以1/2的概率选择第二个,以1/3的概率选择第三个,以此类推,以1/m的概率选择第m个对象。当该过程结束时,每一个对象具有相同的选中概率,即1/n,证明如下。
证明:第m个对象最终被选中的概率P=选择m的概率*其后面所有对象不被选择的概率,即
对应蓄水池抽样问题,可以类似的思路解决。先把读到的前k个对象放入“水库”,对于第k+1个对象开始,以k/(k+1)的概率选择该对象,以k/(k+2)的概率选择第k+2个对象,以此类推,以k/m的概率选择第m个对象(m>k)。如果m被选中,则随机替换水库中的一个对象。最终每个对象被选中的概率均为k/n,证明如下。
证明:第m个对象被选中的概率=选择m的概率*(其后元素不被选择的概率+其后元素被选择的概率*不替换第m个对象的概率),即
382. 链表随机节点
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
/** @param head The linked list's head.
Note that the head is guaranteed to be not null, so it contains at least one node. */
ListNode *head;
Solution(ListNode* head) {
this->head = head;
}
/** Returns a random node's value. */
int getRandom() {
int ans = head->val;
int i = 2;
auto node = head->next;
while(node){
int j = rand()%i;
if(j==0)ans = node->val;
++i;
node=node->next;
}
return ans;
}
};
/**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(head);
* int param_1 = obj.getRandom();
*/
398. 随机数索引
class Solution {
public:
vectora;
Solution(vectornums) {
this->a = nums;
}
int pick(int target) {
int ans;
int cnt = 1;
for(int i = 0;i
c语言水库抽样算法代码,LeetCode---蓄水池抽样算法相关推荐
- 建模matlab的算法代码呀,数学建模算法打包
数学建模十大算法程序详解(打包了) 十大算法 1说明.txt Floyd算法 floyd.txt 中国数学建模-数学工具-Floyd最短路算法的MATLAB程序.txt Newton插值.txt di ...
- 先来先服务算法代码_程序员算法与数据结构基础中的基础,栈与递归
在此之前,我们介绍了动态规划.深度优先搜索等基础算法,但是,有部分好友评论说,难度太难了,我们知道动态规划的自顶向下跟深度优先搜索一般都用递归实现,今天我们就先来讲讲算法与数据结构中,基础中的基础递归 ...
- 扫描线填充算法代码_手写算法并记住它:计数排序
对于经典算法,你是否也遇到这样的情形:学时觉得很清楚,可过阵子就忘了? 本系列文章就尝试解决这个问题. 研读那些排序算法,细品它们的名字,其实都很贴切. 比如计数排序,所谓"计数" ...
- java实现裁剪算法代码_Cyrus-Beck图像裁剪算法归纳
此算法能使用任意多边形对一条直线段进行裁剪. 类GLdoublePoint: 公有-GLdouble x ,y: 类line: 公有-GLdoublePoint fir ...
- MyEclipse6.0注册码算法代码,MyEclipse7.0注册码算法代码
import java.io.*; /** * MyEclipse6.0 Register Code * @author 匿名 * */ public class KeyGenerator { ...
- 图解连续学习中的蓄水池抽样算法(The Illustrated Reservoir sampling)
图解连续学习中的蓄水池抽样算法The Illustrated Reservoir sampling 前言 什么是Reservoir Sampling? 蓄水池抽样算法(Reservoir sampli ...
- 机器学习中的数学——蓄水池抽样算法(Reservoir Sampling Algorithm)
分类目录:<机器学习中的数学>总目录 蓄水池抽样算法(Reservoir Sampling Algorithm)解决了未知长度数据的均匀抽样问题,即:给定一个数据流,数据流长度NNN很大, ...
- 排序算法 | 直接选择排序,算法的图解、实现、复杂度和稳定性分析
排序算法 | 直接选择排序,算法的图解.实现.复杂度和稳定性分析 目录 1.直接选择排序的原理 2.图解直接选择排序 3.算法代码实现 4.算法复杂度分析.稳定性分析 直接选择排序 1.直接选择排序的 ...
- k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优
k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优 k近邻算法 k近邻算法概述 k近邻算法代码实现 k近邻算法的评价 朴素贝叶斯算法 朴素贝叶斯算法概述 朴素贝叶斯代码实现 朴素贝叶斯的评价 分类模型 ...
- LeetCode Random Pick Index(蓄水池抽样算法)
问题:给出一个数组,存在相同的数,随机输出目标数所在的下标 思路:使用蓄水池抽样算法,当第一次找到目标数时,作为选取.接着如果随机数等于0,则选取.在遍历完后,直接返回选取的值 具体代码参考: htt ...
最新文章
- 打造AI产教融合共赢生态,微软亚洲研究院扩大开放了这些资源
- MPB:华中师大谢波组-​​​微生物非标记定量蛋白质组学样品制备方法
- Linq To Entity 的增删改查(技术储备,怕忘了)
- 想和你一起为 Visual Studio 庆祝20岁生日
- Linux 内核打印级别
- element提交图片限制一张_科研SCI论文图片常见问题和错误汇总
- php js脚本查询php,php结合js实现多条件组合查询
- java 申明数组 默认构造函数_没有默认构造函数,如何定义对象的数组
- vue项目 拷到别的电脑应该怎吗再次重新运行
- gif生成工具,gif动图分解
- 【有限元分析】ANSYS workbench CFX风力机外流场计算
- linux服务器ftp连接失败的原因,错误:无法与 SFTP 服务器建立 FTP 连接
- Qt5.6.1如何使用qpf2字体
- 利用牛顿公式求解方程的根并且实现牛顿下山法
- 自主创新持续领航,麒麟信安荣获“网信自主创新尖峰企业”称号
- 南京大学软件学院2018保研夏令营经验
- 敏捷开发框架的开发运用之ERP系统开发
- python画图小猪佩奇动画片全集_用Python画小猪佩奇
- 收藏!如何建设数据团队 | 2020年《顶级数据团队建设全景报告》重磅发布
- Java获取当前时间的上一个月和下一个月,第一天和最后一天,任意时间的第一天和最后一天,任意时间上一个月和下一个月