概率题

转载 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




相关文章推荐

概率与统计训练题

  • 2015年06月01日 08:44
  • 51KB
  • 下载

概率统计 两套试卷样题

  • 2009年12月25日 21:06
  • 388KB
  • 下载

一些概率条件判断和组合数学题

①    袋子中分别一叠纸币,其中5元面值的纸币6张,10元面值的纸币5张,20元面值的纸币4张,从袋子中任意取4张纸币,则每种面值至少取到一张的概率为____。 解答: 总张数6+5+4=15张 从...

超高概率硬件工程师笔试题

  • 2011年07月13日 13:35
  • 100KB
  • 下载

ZOJ 3822 Domination 概率DP 2014年ACM_ICPC亚洲区域赛牡丹江现场赛D题

题目大意: 就是现在有一个N*M的棋盘(1 大致思路: 这题同步赛的时候没感觉, 现在做发现就是一个水题, 当时还是太弱了... 状态转移方程见代码注释吧.. 代码如下: Result  :...

牛客堂刷题(常见面试题精讲)之随机概率

题目1: 给定一个等概率随机产生1~5的随机函数rand1To5如下:  public int rand1To5() { return (int) (Math.random() * 5) + ...

一个与概率有关的程序设计题的求解!

/*有什么问题或者交流请发邮件或者QQ:787928000 * Created on: 2011-2-27 * Author: banxi1988 * Email:b...

HDU 4089 Activation 概率dp好题

G - Activation Time Limit:10000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit...

rockethon2015 C题 Second price auction 概率dp

题意:n个人去竞拍一件商品,下面给出n个区间表示每个人出的价是区间中随机的一个数(概率均等)则第一名需要付的钱是第二名的竞拍价格(允许并列第一名)求支付的钱的期望。 思路:参考九野巨的博客:http:...

HDOJ 2200 Eddy's AC难题(数学组合概率题)

Problem Description Eddy是个ACMer,他不仅喜欢做ACM题,而且对于Ranklist中每个人的ac数量也有一定的研究,他在无聊时经常在纸上把Ranklist上每个人的ac题...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:概率题
举报原因:
原因补充:

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