编程珠玑column12

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

12.2

列举了从[0,5)中选2个数的情形,0被选中的概率是2/5

通常情况下,从r个数中选择s个数,某一个数(确切说是选择第1个数时)被选中的概率是s/r

可以这样思考:从r个数中任选一个数该数被选中的概率是1/r,但这是选择s个数,就相当于s次机会,相当于s/r,这样思考不严谨。


参考了http://blog.csdn.net/songzitea/article/details/8761940 

该博文给出一种合理的解释。

因为从r中选s个数相当于总共有c(r,s)种组合(combination).比如某数t被选择之后,就是从r-1个数种找s-1个数

总共c(r-1,s-1)种组合。某数t被选中发生的情形为c(r-1,s-1),总的事件的情形为c(r,s)

所以某数选中的概率为p=c(r-1,s-1)/c(r,s)=r/s


编程珠玑12 正文 如何生成0~n-1内的m个随机整数 1、方法一 比如要从5个数里选出2个数,第一个数的概率是2/5,第二个数的概率是1/4,然后是0/3 那么现在已经很清楚了。 可以写代码如下: for (int i = 0; i < n; ++i) if (ra 阅读详情

相关推荐

编程珠玑12章(取样问题)学习笔记

编程珠玑12章(取样问题)学习笔记 ――2013.01.17(By:Neicole) 零。大纲 1. 问题描述 2. 问题改进 3. 第一种方案――使用概率计算 4. 第二种方案――逐个随机插入 5. 第三种方案――内部乱序抽取 6. 我的收益   一。问题描述  1. 名称:随机取样任务  2. 输入:选区名列表,整数m  3. 输出:随机选择的m个选区名列表  P

Neicole ~~ 学习旅程(大学) 8541

编程珠玑第十二章--应用之取样问题

原理(P142)1.正确理解所遇到的问题。(与用户讨论,自己的想法) 2.提炼抽象问题。(简洁,明确地陈述问题) 3.考虑尽可能多的解法(想法要灵活,Google搜索,书籍等) 4.实现一种解决方案 5.回顾。Review看是否可以优化问题定义:输入两个正整数参数m,n ,其中m<=n.输出是0~n-1中m个随机的有序列表,不允许重复。其中每个数出现的概率要相等。解法:解法一:利用概率,从剩

YellowStar5 752

编程珠玑》第十二章:取样问题

为什么80%的码农都做不了架构师?>>> ...

weixin_34380781的博客 188

编程珠玑读书笔记-第12

版权声明:本文为 DouMiaoO_Oo 原创文章,未经允许不得转载!转载请注明出处 重点内容 版权声明:本文为 DouMiaoO_Oo 原创文章,未经允许不得转载!转载请注明出处 重点内容 ...

DouMiaoO_Oo的博客 326

编程珠玑Column12中从n个数中产生随机的m个数

方法1: 1 void rand1(int n,int m) 2 { 3 for(int i=0;i<n;++i) 4 if(rand()%(n-i)<m)//用n-i比再定义一个num记录还剩几个更好 5 { 6 cout<<i<<" "; 7 ...

weixin_30917213的博客 133

编程珠玑 Column 1

概述Column 1由一个问题展开讨论:如何给一个包含0到9,999,999编号的记录文件排序并输出到另一个文件,其中编号不重复,只允许1M左右的内存空间。最优的解法自然是采用位数组,1.25×106B大小的位数组含10,000,000位,可以保存规定范围内数是否存在。这种方法很好的利用了编号不重复的特性。生成随机数文件要对算法进行实现,面临的第一个问题就是,如何生成这么一个记

Rui的专栏 1047

编程珠玑 column 10

主要介绍的稀疏矩阵的存储方式。没必要存储矩阵的每个点。只需存储不为0的值的点。使用一个数组来代表所有的列,一个链式表来代表给定列中的不为0的元素 该链式表可以定义成 struct Node p{ int pointnum; int row; Node *next }

kiwi's garden 650

编程珠玑column14 heaps

堆的siftdown操作 假设x[1..n]的序列已经是一个堆,现在修改x[1]的值,然后调整这个序列使维持堆的性质 初始化所以i为1,直到i没有子节点或者子节点的值均大于i所在的节点的值为止。 把c设置成节点i的子节点中值较小的节点索引 c=2*i if(c+1 if(x[c+1] c++

kiwi's garden 1073

编程珠玑总结—column 11 Sorting

Technorati 标签: 算法,笔记 插入排序: 插入排序,快速排序

Jason技术笔记 620

编程珠玑 column 11 sorting

快速排序算法的比较。 在排序一个所有元素均相同的数组的时候: qsort1每一次递归调用排序区间只能缩减1,只能排序好一个数字,可以从代码qsort1(m+1,u)中体现。因为所有元素相同时,qsort中m值执行的时候不会发生变化。qsort1排序区间的缩小只能体现在 qsort1(m+1,u)中。即要执行n-1次qsort1递归调用。每次qsort1递归调用,需进行 改进后快速排

kiwi's garden 733

编程珠玑Column14中堆排序的实现

最关键的函数: 1 inline void swap(int *arr,int i,int j) 2 { 3 if(i==j) 4 return; 5 arr[i]=arr[i]^arr[j]; 6 arr[j]=arr[i]^arr[j]; 7 arr[i]=arr[i]^arr[j]; 8 } 9 10...

weixin_30919429的博客 145

编程珠玑column15 strings of pearls

15.2 介绍了求字符串中最长的重复子串的方法。 其中一种方法是先申请一个指针数组a保存指向该字符串中每一个字符所在的地址。 这样a中的元素依次为第0个字符,第1个字符,第2个字符.的地址...。 然后对a进行一个快速排序。这样最长的重复子串只需从a中的相邻元素中搜索。 排序耗时o(nlgn),,相邻元素之间比较计算最长重复子串耗时o(n)

kiwi's garden 648

编程珠玑译-Column 1:开篇

这个程序的问题是简单的,“我该怎么样给你个磁盘文件做排序?”  在我告诉你我是怎么犯下我第一个错误之前,让我给你一个机会去做得比我还好。你会怎么回答? 1.1 一次友好的谈话     我的错误就是回答了他的这个问题。为给了他一个关于怎么在磁盘上实行归并排序的缩略图草图。我建议他深入研究一下这个会让他遇见比一时的热情更少错误的算法文本 ——他更关心如何解决这个问题而不是深入他的学习。接着我告诉了

Seere的博客 486

编程珠玑Column9中二分查找的优化

二分查找的确是个很不错的算法,虽然简单,但是边界容易出错。 书中最初的二分查找l和u(我的代码中是r)对应数组中最小下标和最大下标,即l=0,u=n-1,数组为arr[l..u]。而后面优化的代码中l和u就变成了最小下标-1和最大下标+1了,即l=-1,u=n,数组为arr[l+1...u-1]。不太明白其中深刻含义,我试了一下l=0,u=n(Python中范围都是这么表示),发现第二段代码(即...

weixin_30432007的博客 174

编程珠玑Column13中5种实现整型集合(IntSet)的方式

首先构造公共基类,因为包含纯虚函数,所以是虚基类 View Code 1 #pragma once 2 3 class IntSet{ 4 public: 5 virtual int size()=0; 6 virtual void report(int *v)=0; 7 virtual void insert(int t)=0; 8 }; ...

weixin_30432007的博客 133

编程珠玑Column11中插入排序和快排序

插入排序最终版本: insertion sort 快排序最终版本: quick sort 1 int cutoff=10;//瞎定义的 2 3 void quick_sort1(int l,int u) 4 { 5 if(u-l<cutoff) 6 return ; 7 int p=l+rand()%(u-l+1);//...

weixin_30715523的博客 114

Reservoir Sampling - 蓄水池抽样问题

问题起源于编程珠玑Column 12中的题目10,其描述如下:   How could you select one of n objects at random, where you see the objects sequentially but you do not know the value of n beforehand? For concreteness, how would yo...

weixin_34056162的博客 131

Apr 4 2020 - What I learned

**今天在撸《编程珠玑》,更少了,明天补。 【数据结构】栈(Stack)和队列(Queue)都是操作受限的线性表。栈仅在表尾插入和删除元素;队列仅在表头删除元素、在表尾插入元素。总结:两头不能随意操作=操作受限。一个线性序列经过Queue后只能得到与原序列相同的元素序列,而经过一个Stack后则可以得到多种元素序列。 Tips:用两个Stack可以模拟出一个Queue的入队和出队操作。 Queu...

只会啃书的博客 193

Reservoir Sampling - 蓄水池抽样

问题起源于编程珠玑Column 12中的题目10,其描述如下:   How could you select one of n objects at random, where you see the objects sequentially but you do not

OOM 1225
上一篇: 编程珠玑 column 11 sorting
下一篇: 编程珠玑column14 heaps
scgillian
博客等级 码龄18年 92粉丝 167原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值