面试的时候被问到这个问题了,一脸懵逼。

问题:从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---蓄水池抽样算法相关推荐

  1. 建模matlab的算法代码呀,数学建模算法打包

    数学建模十大算法程序详解(打包了) 十大算法 1说明.txt Floyd算法 floyd.txt 中国数学建模-数学工具-Floyd最短路算法的MATLAB程序.txt Newton插值.txt di ...

  2. 先来先服务算法代码_程序员算法与数据结构基础中的基础,栈与递归

    在此之前,我们介绍了动态规划.深度优先搜索等基础算法,但是,有部分好友评论说,难度太难了,我们知道动态规划的自顶向下跟深度优先搜索一般都用递归实现,今天我们就先来讲讲算法与数据结构中,基础中的基础递归 ...

  3. 扫描线填充算法代码_手写算法并记住它:计数排序

    对于经典算法,你是否也遇到这样的情形:学时觉得很清楚,可过阵子就忘了? 本系列文章就尝试解决这个问题. 研读那些排序算法,细品它们的名字,其实都很贴切. 比如计数排序,所谓"计数" ...

  4. java实现裁剪算法代码_Cyrus-Beck图像裁剪算法归纳

    此算法能使用任意多边形对一条直线段进行裁剪. 类GLdoublePoint: 公有-GLdouble x ,y: 类line:                 公有-GLdoublePoint fir ...

  5. MyEclipse6.0注册码算法代码,MyEclipse7.0注册码算法代码

    import java.io.*; /** * MyEclipse6.0 Register Code * @author 匿名 * */ public class KeyGenerator {     ...

  6. 图解连续学习中的蓄水池抽样算法(The Illustrated Reservoir sampling)

    图解连续学习中的蓄水池抽样算法The Illustrated Reservoir sampling 前言 什么是Reservoir Sampling? 蓄水池抽样算法(Reservoir sampli ...

  7. 机器学习中的数学——蓄水池抽样算法(Reservoir Sampling Algorithm)

    分类目录:<机器学习中的数学>总目录 蓄水池抽样算法(Reservoir Sampling Algorithm)解决了未知长度数据的均匀抽样问题,即:给定一个数据流,数据流长度NNN很大, ...

  8. 排序算法 | 直接选择排序,算法的图解、实现、复杂度和稳定性分析

    排序算法 | 直接选择排序,算法的图解.实现.复杂度和稳定性分析 目录 1.直接选择排序的原理 2.图解直接选择排序 3.算法代码实现 4.算法复杂度分析.稳定性分析 直接选择排序 1.直接选择排序的 ...

  9. k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优

    k近邻算法,朴素贝叶斯算法,分类模型评估,模型调优 k近邻算法 k近邻算法概述 k近邻算法代码实现 k近邻算法的评价 朴素贝叶斯算法 朴素贝叶斯算法概述 朴素贝叶斯代码实现 朴素贝叶斯的评价 分类模型 ...

  10. LeetCode Random Pick Index(蓄水池抽样算法)

    问题:给出一个数组,存在相同的数,随机输出目标数所在的下标 思路:使用蓄水池抽样算法,当第一次找到目标数时,作为选取.接着如果随机数等于0,则选取.在遍历完后,直接返回选取的值 具体代码参考: htt ...

最新文章

  1. 打造AI产教融合共赢生态,微软亚洲研究院扩大开放了这些资源
  2. MPB:华中师大谢波组-​​​微生物非标记定量蛋白质组学样品制备方法
  3. Linq To Entity 的增删改查(技术储备,怕忘了)
  4. 想和你一起为 Visual Studio 庆祝20岁生日
  5. Linux 内核打印级别
  6. element提交图片限制一张_科研SCI论文图片常见问题和错误汇总
  7. php js脚本查询php,php结合js实现多条件组合查询
  8. java 申明数组 默认构造函数_没有默认构造函数,如何定义对象的数组
  9. vue项目 拷到别的电脑应该怎吗再次重新运行
  10. gif生成工具,gif动图分解
  11. 【有限元分析】ANSYS workbench CFX风力机外流场计算
  12. linux服务器ftp连接失败的原因,错误:无法与 SFTP 服务器建立 FTP 连接
  13. Qt5.6.1如何使用qpf2字体
  14. 利用牛顿公式求解方程的根并且实现牛顿下山法
  15. 自主创新持续领航,麒麟信安荣获“网信自主创新尖峰企业”称号
  16. 南京大学软件学院2018保研夏令营经验
  17. 敏捷开发框架的开发运用之ERP系统开发
  18. python画图小猪佩奇动画片全集_用Python画小猪佩奇
  19. 收藏!如何建设数据团队 | 2020年《顶级数据团队建设全景报告》重磅发布
  20. Java获取当前时间的上一个月和下一个月,第一天和最后一天,任意时间的第一天和最后一天,任意时间上一个月和下一个月

热门文章

  1. UVA 679 小球掉落 思维 + 数据结构
  2. 委托/事件/线程传参简单理解
  3. 小弟浅谈asp.net页面生成周期---上
  4. 205615872 能用来干么?
  5. -seo要掌握的20条网站的准则
  6. ASP.NET基础教程-利用javascript将光标定位到文本框
  7. LVS (Linux虚拟服务器)模型及算法
  8. 微信小游戏排行榜设计技术梳理
  9. swift -inout关键字
  10. 如何使用Log4net创建日志及简单扩展