概率题

转载 2012年03月27日 20:18:42

http://www.gocalf.com/blog/build-rank3-from-rand5.html

问题描述:现在有一个叫做Rand5的函数,可以生成等概率的[0, 5)范围内的随机整数,要求利用此函数写一个Rand3函数(除此之外,不能再使用任何能产生随机数的函数或数据源),生成等概率的[0, 3)范围内的随机整数。

我第一次遇到这个问题的时候,着实犯了一回傻,自以为是地证明了这个题目是无解的。其实从概率的角度来看,题目的要求就是,利用一个1/5的概率源,通过某种方式产生出1/3的概率输出。我们都知道,概率运算法则有加法和乘法,而在我的记忆中,算法是“在有限步骤内求解某一问题所使用的一组定义明确的规则”,算法的一个重要特征就是有穷性,即一个算法必须保证执行有限步之后结束。那么有限多个1/5通过加法和乘法是不可能的到1/3这个数值的,因为加法和乘法都不会给分母带来新的因子,那么分母中的3根本就不可能出现。

然而我忽略了这样一个式子:

i=0(25)i=1125=53

基于这个想法,我们来看看这个算法是什么样子的:

1
2
3
4
5
def Rand3():
  x = -1
  while not 0 <= x < 3:
    x = Rand5()
  return x

算法很简单,x是我们最终要输出的数字,只要它不在[0, 3)范围内,就不断地调用Rand5来更新它。直观地看,算法输出的数字只有0、1、2这三个,而且对任何一个都没有偏袒,那么显然每个数字的概率都是1/3,那让我们来严格地计算一下。

以输出0为例,看看概率是多少。x的第一个有效数值是通过Rand5得到的。Rand5返回0的概率是1/5,如果这事儿发生了,我们就得到了0,否则只有当Rand5返回3或4的时候,我们才有机会再次调用它来得到新的数据。第二次调用Rand5之后,又是有1/5的概率得到0,2/5的概率得到3或4导致循环继续执行下去,如此反复。因此概率的计算公式为:

p=====15+25×(15+25×(15+25×()))15×i=0(25)i15×112515×5313

喏,计算表明,Rand3输出0的概率确实是1/3,对于另外两个数字也是一样的。

那么这段代码是不是一个算法呢,它是否满足算法的有穷性呢?我不能确定,虽然它不停机的概率是0,然而这个概率是一个极限值,唉,回去复习极限知识先。

1
2
3
4
5
def Rand7():
  x = -1
  while not 0 <= x < 21:
    x = Rand5()5 + Rand5()
  return x % 7

改变一下题目,如果要求利用Rand5编写Rand7怎么办?很简单,用两个Rand5可以拼出Rand25,然后就用前面的方法即可:


百度的一个面试题目:

.已知一随机发生器,产生0的概率是p,产生1的概率是1-p,现在要你构造一个发生器, 
使得它构造0和1的概率均为1/2;构造一个发生器,使得它构造1、2、3的概率均为1/3;…, 
构造一个发生器,使得它构造1、2、3、…n的概率均为1/n,要求复杂度最低。

初看确实有点头晕,也没什么思路。但是仔细想想为什么生成0和1的概率均为1/2,我们可以看成是生成0和1的概率是均等的。这样想之后,似乎就没那么不好理解了。

原始的随机数生成器,生成0 的概率为p,生成1的概率为1-p,那么怎么构造才能使得生成0和1的概率相等呢。或者说有两个独立的事件的概率是相等呢?

这样来做一下,让该随机数生成器生成两个数,那么序列是00,01,10,11概率分别为 p*p,p(1-p),(1-p)p,(1-p)*(1-p)

很明显,这四种情况中存在两个独立的事件概率是相等。也就是01和10,那么我把01看成是0,10看成是1,那么他们输出的概率均为p(1-p),其他的情况舍弃。这样就得到了0和1均等生成的随机器了。

思维在扩展一下,生成1,2,…n的概率分别是1/n,也就是均等的。那么我们可以想怎么生成一个序列,里面有n个独立时间,概率是相等。而且我们能够猜测到这些概率的形式为 p^x*(1-p)^y,如果要相等,那么x必须等于y.这样就说明了序列中0和1的个数是相等的。而且这样的情况必须有多与n个才行。

数学表示就是 C(2x,x) >=n ,我们只需要知道x就能够知道序列要多长了。而且中间必定有超过n个概率为{p(1-p)}^x不相等序列。

问题就可以解决了。

其实卡我的问题是,丢掉那些多余的,只要n个等概率的序列,是否真的是等概率的(最终输出)。

腾讯面试题:

已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。

利用的方法和上个问题类似,如何能够得到一个等概率的独立事件。这个问题和上个问题不同的是,这里产生的序列,要变成和的形式或者其他的形式,那么概率就会发生变化了。

如果能够得到一组等概率的数,不管是什么数,只要等概率而且个数大于10,那么问题就可以解决了。

发现(rand7()-1)*7+rand7(),可以等概率的生成1到49。

呵呵,这不就得了,只要把11-49砍掉就可以了。不过这样的效率比较低。可以砍掉41-49,然后在把1-40映射到1-10,那么问题也就解决了。

腾讯面试题:

等概率采样数据流中的数字。

比如从数据流中等概率的采样k个数字。

怎么做呢?先拿到最开始的k个数字,然后以后的每个数字等概率的和这k个数字交换。那么就可以达到每个数字被抽取的概率是等概率的。

怎么证明呢?

采用归纳方法,假设前n个数字等概率的采样k个数字,那么每个数字被采样的概率为k/n,现在新来一个数字,变成了n+1个数字,那么每个数字被采样的概率变位k/(n+1),我们要证明这个,  第i个选中的概率是k/(n+1), 其他k个没有被交换的概率是n/(n+1), 所以还在的概率是k/n * n/(n+1).

这个问题在计算机程序设计艺术书中提到,叫Reservoir Sampling(蓄水池采样),属于随机算法的一种。

现在假定存在了n个数字,来了第n+1个数字,那么第n+1个数字被选择的概率是k/n+1,那么我们推算其他的数字被选择的概率也是k/n+1

P(其余数字) = p(其余数字|第n+1个选择)*p(第n+1个选择) + p(其余数字|第n+1个不选择)*p(第n+1个不选择)

                      =  k/n*(1-1/k)*k/(n+1) + k/n*(n+1-k)/(n+1)

                      = k*(k-1) / (n *(n+1) ) + k*(n+1-k) / (n*(n+1))

                      = k*n/(n *(n+1))

                      = k/(n+1)

得证。其余数字被选择的概率依然也是 k/(n+1)

http://stqdd.com/blog/?p=520




51nod 1667 概率好题

Problem甲乙进行比赛。 他们各有k1,k2k_1,k_2个集合[Li,Ri][L_i,R_i] 每次随机从他们拥有的每个集合中都取出一个数 S1=∑S_1=\sum甲取出的数 S2S_2...
  • samjia2000
  • samjia2000
  • 2016年11月03日 20:57
  • 318

[51nod 1667]概率好题

Description甲乙两人在van游戏。 他们各有k1,k2个集合[li,ri] 每个人可以从各自的每个集合中随机选出一个整数。 设S1=∑甲选的数S1=\sum甲选的数,S2=∑乙选的数S...
  • alan_cty
  • alan_cty
  • 2016年11月11日 21:48
  • 448

IT 概率面试题整理

若干面试概率题 概率论是计算机科学非常重要的基础学科之一,概率题也是在程序员求职过程中经常遇到的问题。 以下总结若干经典的概率题,作为练习。 1. 在半径为1的圆中随机选取一点。 方法1:在x轴[-1...
  • dengm155
  • dengm155
  • 2016年09月25日 12:07
  • 4286

概率题 面试 笔试

概率题 面试 笔试本文总结了面试或笔试中可能考到的概率题。第1题 一个桶里面有白球、黑球各100个,现在按下述规则取球: - i 、每次从通里面拿出来两个球; - ii、如果取出的是两...
  • cmonkey_cfj
  • cmonkey_cfj
  • 2015年07月12日 16:26
  • 1690

刷刷笔试题~~[概率]

1.马路上有编号1,2,3...10的十盏路灯,为节约用电而又不影响照明,可以把其中3盏灯关掉,但不可以同时关掉相邻的两盏,在两端的灯都不能关掉的情况下,有()种不同的关灯方法。 答:采用插隔板法...
  • nanaMasuda
  • nanaMasuda
  • 2016年08月30日 16:30
  • 646

一个古典概率问题(小学奥数题)

这是一道小学生的奥数题,我在早上上班的路上思考了将近一个小时才想清楚。现在的小学生真辛苦!这样的奥数教育真是对小朋友的摧残. 问题如下: 袋子中有5个红球,5个白球和5个黄球。这15个球摸起来是一...
  • liyuanbhu
  • liyuanbhu
  • 2014年02月17日 09:34
  • 3671

概率趣题:三个犯人

概率趣题:三个犯人三个犯人都住在隔离间,并且都被判处了死刑。监狱官赦免了其中 一个犯人。看守知道谁会赦免,但不会说。犯人A脸皮厚,想让看守告诉他,B和C谁会被执行死刑。 如果赦免的是B,看守就会说C...
  • wyf12138
  • wyf12138
  • 2016年12月06日 22:21
  • 590

[51nod 1667]概率好题

题目描述甲乙进行比赛。 他们各有k1,k2个集合[Li,Ri] 每次随机从他们拥有的每个集合中都取出一个数 S1=sigma甲取出的数,S2同理 若S1>S2甲胜 若S1=S2平局 否则乙胜 ...
  • WerKeyTom_FTD
  • WerKeyTom_FTD
  • 2016年11月04日 15:54
  • 331

java基础算法学习之概率算法

概率算法是以前一直没有接触过的算法,第一眼看见的时候真的觉得很厉害,这个算法的思想很简单但是运用好很难,大概就是将问题转化为几何图形,然后通过点的分布来求解我们需要的信息,这里的例子是求解π, ...
  • justperseve
  • justperseve
  • 2016年04月25日 09:14
  • 2345

【概率DP入门】

http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710606.html
  • zy691357966
  • zy691357966
  • 2015年07月07日 10:39
  • 5374
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:概率题
举报原因:
原因补充:

(最多只允许输入30个字)