抽奖,a概率0.2,b概率0.3,a,b都至少有一个的期望
2014-12-24 16:47
344 查看
这也是我在读完算法导论后遇到的一个题目。
很感激算法导论第三版,第75页提到的礼券收集者问题。不然这道题,我真不一定做得出来。
我确信这个东西是我的原创。
问题是这样的:
你去开游戏的箱子,开出A概率0.2,开出B概率0.3,啥都没有的概率0.5。
1.开出A和B(都至少1个,
AB合计算一套装备)的数学期望是多少次?
2.如果至少x个A和y个B(x>0,y>0),期望又是多少?
3.如果A+B至少是z个,期望又是多少?
---------------------------下面是解答过程-----------------------------------
我们把1看作2的一种特殊情况,然后来杀2,3两道题。
先来考虑个元问题:如果你去抽奖,抽中的概率是0.2,那么你抽中一次的次数期望是多少?答案很明显是1/0.2 = 5。。。如果不服,自己用极限推一下,正好最终极限化简下来的形式就是这么简单。。
如果想要x个A,y个B那么,考虑,一个简单模型就是A的概率是0.4,B的概率是0.6,,比如我们如果求出来这个模型的期望是E,那么,由于A和B一共只占有0.2+0.3 = 0.5的可能性,也就是有0.5的几率是浪费了,所以,原题的结果就是E/(0.5) = 2*E.
现在我们倒回去:简单模型就是A的概率是0.4,B的概率是0.6。要 x个A和y个B,那么,可以用动态规划:
假定DP(X,Y)表示至少有X个A和Y个B的期望。。。那么考虑下一步,如果是A,概率是0.4,整个变成 (1+ DP(X-1,Y))..如果是B,概率是0.6,整个变成(1+DP(X,Y-1))。。
合并得到 DP(X,Y) = 0.4*(1+DP(X-1,Y))+0.6*(1+DP(X,Y-1))。。而且如果X=0时,DP(0,Y)应该是Y/0.6, Y=0时,DP(X,0)应该是X/0.4。。。。DP(0,0)是0。。动态规划成立了,用计算机算一下,时间复杂度是O(X*Y),抱歉我没有推出通项公式;
考虑回来结果就是2*DP(X,Y)..
比如第一问。
DP(1,1) = [ 0.4*(1+DP(0,1))+0.6*(1+DP(1,0))]/(0.2+0.3) = [0.4*(1+1/0.6)+0.6*(1+1/0.4)] /(0.2+0.3)=19/3
第三问:
A+B至少有Z个,这个啊,很简单,把A.B考虑成一体,这样,就是上面提到的元问题,结果就是z/(0.2+0.3) = 2*z
--------------------脑洞大开系列---------------------
脑洞大开,如果有A,B,C该怎么办,A是0.1,B是0.2,C是0.7。。。需要它们各自至少一个。。。那么
很简单,像第二问的解答一样,先固定A,假定第一个是A,那么之后BC求出来,固定B,AC求出来,固定C,AB求出来。。。然后通过 类似DP(X,Y) = 0.4*(1+DP(X-1,Y))+0.6*(1+DP(X,Y-1))的带权值整合的形式,搞一搞就行了。一个递归而已。。。如果A,B,C,D,那么先固定A,求BCD,固定B求ACD。。。等等一层层递归下来就可以。。。当然把AB以及CD分别看作一个整体是不行的。。。这种LogN归并会出现偏差。。。暂时没想到好办法。
很感激算法导论第三版,第75页提到的礼券收集者问题。不然这道题,我真不一定做得出来。
我确信这个东西是我的原创。
问题是这样的:
你去开游戏的箱子,开出A概率0.2,开出B概率0.3,啥都没有的概率0.5。
1.开出A和B(都至少1个,
AB合计算一套装备)的数学期望是多少次?
2.如果至少x个A和y个B(x>0,y>0),期望又是多少?
3.如果A+B至少是z个,期望又是多少?
---------------------------下面是解答过程-----------------------------------
我们把1看作2的一种特殊情况,然后来杀2,3两道题。
先来考虑个元问题:如果你去抽奖,抽中的概率是0.2,那么你抽中一次的次数期望是多少?答案很明显是1/0.2 = 5。。。如果不服,自己用极限推一下,正好最终极限化简下来的形式就是这么简单。。
如果想要x个A,y个B那么,考虑,一个简单模型就是A的概率是0.4,B的概率是0.6,,比如我们如果求出来这个模型的期望是E,那么,由于A和B一共只占有0.2+0.3 = 0.5的可能性,也就是有0.5的几率是浪费了,所以,原题的结果就是E/(0.5) = 2*E.
现在我们倒回去:简单模型就是A的概率是0.4,B的概率是0.6。要 x个A和y个B,那么,可以用动态规划:
假定DP(X,Y)表示至少有X个A和Y个B的期望。。。那么考虑下一步,如果是A,概率是0.4,整个变成 (1+ DP(X-1,Y))..如果是B,概率是0.6,整个变成(1+DP(X,Y-1))。。
合并得到 DP(X,Y) = 0.4*(1+DP(X-1,Y))+0.6*(1+DP(X,Y-1))。。而且如果X=0时,DP(0,Y)应该是Y/0.6, Y=0时,DP(X,0)应该是X/0.4。。。。DP(0,0)是0。。动态规划成立了,用计算机算一下,时间复杂度是O(X*Y),抱歉我没有推出通项公式;
考虑回来结果就是2*DP(X,Y)..
比如第一问。
DP(1,1) = [ 0.4*(1+DP(0,1))+0.6*(1+DP(1,0))]/(0.2+0.3) = [0.4*(1+1/0.6)+0.6*(1+1/0.4)] /(0.2+0.3)=19/3
第三问:
A+B至少有Z个,这个啊,很简单,把A.B考虑成一体,这样,就是上面提到的元问题,结果就是z/(0.2+0.3) = 2*z
--------------------脑洞大开系列---------------------
脑洞大开,如果有A,B,C该怎么办,A是0.1,B是0.2,C是0.7。。。需要它们各自至少一个。。。那么
很简单,像第二问的解答一样,先固定A,假定第一个是A,那么之后BC求出来,固定B,AC求出来,固定C,AB求出来。。。然后通过 类似DP(X,Y) = 0.4*(1+DP(X-1,Y))+0.6*(1+DP(X,Y-1))的带权值整合的形式,搞一搞就行了。一个递归而已。。。如果A,B,C,D,那么先固定A,求BCD,固定B求ACD。。。等等一层层递归下来就可以。。。当然把AB以及CD分别看作一个整体是不行的。。。这种LogN归并会出现偏差。。。暂时没想到好办法。
相关文章推荐
- 编写一个程序,对于小于1000的正整数,通过实验确定期望产生多少个数才能使得每个数至少出现一次。
- java实现一个抽奖概率类
- [概率]假设你去参加一个抽奖节目
- 一个经典概率算法(用于抽奖等场景)
- java实现一个抽奖概率类
- 实例--post请求,完成一个抽奖程序概率的测试
- 一个可以设置中奖概率的抽奖程序[转]
- C# 做一个指定概率的抽奖程序
- 老王有两个孩子,已知至少有一个孩子是在星期二出生的男孩。问:两个孩子都是男孩的概率是多大?
- (转)老王有两个孩子,已知至少有一个孩子是在星期二出生的男孩。问:两个孩子都是男孩的概率是多大?
- 【HDU 4418】【概率DP 高斯消元】 Time travel 给出一个数轴,有一个起点和终点,某人可以走1-m步,每一种有一个概率,初始有一个方向,走到头则返回,问到达终点期望
- 一个简单的抽奖(概率)小程序
- 一个抽奖函数(自定义中奖项数和概率)
- 1203(hdu-能拿到至少一个通知书的最大概率)
- ss请cc来家里钓鱼,鱼塘可划分为n*m的格子,每个格子有不同的概率钓上鱼,cc一直在坐标(x,y)的格子钓鱼,而ss每分钟随机钓一个格子。问t分钟后他们谁至少钓到一条鱼的概率大?为多少?
- 系统启动时至少有一个服务或驱动程序产生错误
- 请教一个算法问题,有两个数组A,B,判断A中是否至少有一个元素和B中元素相同
- 在系统启动时至少有一个服务器或驱动程序产生错误。详细信息请用事件查看器查看事件日志。
- 趣题:每一列中至少有一个数字0或数字9