一道抛硬币的概率题

3,641 views
Skip to first unread message

Shuo Chen

unread,
May 12, 2009, 9:39:50 PM5/12/09
to TopLanguage
假设有一个硬币,抛出字(背面)和花(正面)的概率都是0.5,而且每次抛硬币与前次结果无关。
现在做一个游戏,连续地抛这个硬币,直到连续出现两次字为止,问平均要抛多少次才能结束游戏?
注意,一旦连续抛出两个“字”向上游戏就结束了,不用继续抛。


这是某公司的笔试题,大家有空可以做做看。

另外一个变形是,硬币铸造时有差错,抛出字和花的概率分别是p和1-p (0<=p<=1),问平均要抛多少次才能结束这个游戏。

sagasw

unread,
May 12, 2009, 9:49:38 PM5/12/09
to pon...@googlegroups.com
1/4 + 1/4 * 1/4 * 1/2
不知道算的对不对,
字为1,花为0,组合为00,01,10,11,
出现11的可能性为1/4,
出现01后面跟着10的情况为1/4 * 1/4 * 1/2


2009/5/13 Shuo Chen <gian...@gmail.com>

Shuo Chen

unread,
May 12, 2009, 9:52:56 PM5/12/09
to TopLanguage
不对,这答案等于是说平均抛不到一次 (9/32) 就能连续出现两个字?
答案至少要大于 2 吧。


On May 13, 9:49 am, sagasw <sag...@gmail.com> wrote:
> 1/4 + 1/4 * 1/4 * 1/2
> 不知道算的对不对,
> 字为1,花为0,组合为00,01,10,11,
> 出现11的可能性为1/4,
> 出现01后面跟着10的情况为1/4 * 1/4 * 1/2
>

> 2009/5/13 Shuo Chen <giantc...@gmail.com>

sagasw

unread,
May 12, 2009, 10:02:05 PM5/12/09
to pon...@googlegroups.com
概率是0.28
相当于抛四次吧。

2009/5/13 Shuo Chen <gian...@gmail.com>

supern lee

unread,
May 12, 2009, 10:10:49 PM5/12/09
to pon...@googlegroups.com
任意连续两个出现的概率是1/4,
那么n次中的连续两次有(n-1),
则1/4*(n-1)=1
所以需要5次

2009/5/13 sagasw <sag...@gmail.com>

iampeipei

unread,
May 12, 2009, 10:54:17 PM5/12/09
to TopLanguage
0为反面,1为正面。考虑三次抛出结果
000
001
010
011
100
101
110
111
所以连续为1的概率为3/8

吴彧文

unread,
May 12, 2009, 10:57:54 PM5/12/09
to pon...@googlegroups.com
像这种硬币游戏求概率或者平均投掷次数一般都可以用递归的。
T = 1 + 0.5T + 0.5( 1 + 0.5 * 0 + 0.5T)
T = 6.
很容易推广到出字概率为p的情况。
2009/5/13 Shuo Chen <gian...@gmail.com>

Shuo Chen

unread,
May 12, 2009, 11:02:25 PM5/12/09
to TopLanguage
先说个我的笨办法吧:
设抛出字为1,抛出花为0。
抛2次得到'11'的概率是1/4
抛3次得到'011'的概率是1/8

假设刚好抛n次就结束游戏的概率为p(n),那么p(1) = 0, p(2) = 1/4, p(3) = 1/8, p(4) = 1/8, p
(5) = 3/32
刚好抛3次结束游戏,那么抛法只有一种:'011',所以p(3) = 1/8
刚好抛4次结束游戏,那么抛法有2种:'0011'和'1011',所以p(4) = 2/16 = 1/8
刚好抛5次结束游戏,抛法有3种:'00011', '01011', '10011',所以p(5) = 3/32
那么平均抛的次数x = 2*p(2) + 3*p(3) + 4*p(4) + 5*p(5) + ... + n*p(n),n 趋近无穷

问题转换为怎么求p(n),先歇口气,待会儿说。可以看出,如果刚好抛n次结束(n > 3),那么最后三次一定是'011',而且前面n-3次里没有
包含'11',否则就提前结束了。

On May 13, 10:10 am, supern lee <supern....@gmail.com> wrote:
> 任意连续两个出现的概率是1/4,
> 那么n次中的连续两次有(n-1),
> 则1/4*(n-1)=1
> 所以需要5次
>
> 2009/5/13 sagasw <sag...@gmail.com>
>
> > 概率是0.28
> > 相当于抛四次吧。
>

> > 2009/5/13 Shuo Chen <giantc...@gmail.com>

Shuo Chen

unread,
May 12, 2009, 11:10:48 PM5/12/09
to TopLanguage
好吧,我把这个结果解释一下,假设平均抛x次结束游戏。
如果第一次抛的是'0',那么再抛x次就能结束游戏(因为第一个'0'对后面抛的没有影响),一共抛x+1次;
如果第一次抛的是'1',那么头两次抛有两种情况,'11'和'10':
抛出'11'已经结束游戏,一共抛2次;
抛出'10'则还需要抛x次才能结束(因为第2次抛出'0'相当于把前面的结果清空了),一共抛x+2次。
这样可以列出:
x = 0.5(x+1) + 0.25*2 + 0.25*(x+2)
解出 x = 6.

On May 13, 10:57 am, 吴彧文 <atyu...@gmail.com> wrote:
> 像这种硬币游戏求概率或者平均投掷次数一般都可以用递归的。
> T = 1 + 0.5T + 0.5( 1 + 0.5 * 0 + 0.5T)
> T = 6.
> 很容易推广到出字概率为p的情况。

> 2009/5/13 Shuo Chen <giantc...@gmail.com>

吴彧文

unread,
May 12, 2009, 11:14:12 PM5/12/09
to pon...@googlegroups.com
嗯,Project Euler也有道类似的题,而且更有趣一些,虽然跟这个不太一样,但是思路是一样的。
2009/5/13 Shuo Chen <gian...@gmail.com>

chaoyan ma

unread,
May 12, 2009, 10:10:07 PM5/12/09
to pon...@googlegroups.com
我觉得是概率是一个数列和
p^2 ,(1-p^2)p^2,(1-(p^2+(1-p^2)*p^2))*p^2... ...
设 前n项和为sn
则 第n+1项的值为 (1-Sn)*p^2
Sn+ (1-Sn)*p^2=Sn+1

chaoyan ma

unread,
May 12, 2009, 10:40:26 PM5/12/09
to pon...@googlegroups.com
( ⊙ o ⊙ )啊! 搞错了 连续两次应该捆绑为一个独立事件 再算概率
--
离你越近的地方,路途越远;最简单的音调,需要最艰苦的练习

zytju1983

unread,
May 12, 2009, 11:05:14 PM5/12/09
to TopLanguage
这里好像是要求一个随机数(次数)的期望吧,于是有以下结论:
1. n = 1时,p = 0,因为至少需要两次;
2. n = 2时, p = 1/2^2;
3. n = 3时, p = 1/2^3;
...
依次类推可得出平均次数期望为:
2*(1/2^2) + 3*(1/2^3)+...+n*(1/2^n)+...

具体级数计算公式不记得了,哈哈。

zytju1983

unread,
May 12, 2009, 11:13:25 PM5/12/09
to TopLanguage
应该是个求数学期望的问题吧,平均次数为以下级数的和:
2*(1/2^2) + 3*(1/2^3) + ... + n*(1/2^n) + ...

traveler

unread,
May 12, 2009, 11:25:38 PM5/12/09
to TopLanguage
应该是每抛两次出现两次字的概率是0.28吧
相当于抛七次。

On 5月13日, 上午10时02分, sagasw <sag...@gmail.com> wrote:
> 概率是0.28
> 相当于抛四次吧。

Alecs King

unread,
May 12, 2009, 11:40:29 PM5/12/09
to pon...@googlegroups.com

解方程.

设所求期望为 e, 在上次是字/花的情况下期望分别是 h, t:

e = p(1+h) + (1-p)(1+t)
h = p + (1-p)(1+t)
t = p(1+h) + (1-p)(1+t)

易得 h = 1/p^2, e = t = (p+1)/p^2

p = 0.5 时, h = 1/0.25 = 4, e = t = (0.5+1)/0.25 = 6

--
Alecs King

Denny

unread,
May 13, 2009, 12:53:03 AM5/13/09
to TopLanguage
平均次数 = {1*0 + 2* 2^n-1 + 3 * 2^n-2 + 4* 2^n-3 + ... + n * 2^1 + (n +
1)} / 2^n (n趋向于无穷大)

Denny

unread,
May 13, 2009, 1:01:39 AM5/13/09
to TopLanguage
没看清楚题目,上面这个有问题,想法类似于Shuo Chen

hyifeng

unread,
May 13, 2009, 5:38:33 AM5/13/09
to TopLanguage
设 字为A 花为B, 把抛出来的结果写成字符串,
现在求 *不连续* 构成两个A 的字符串组合数。

用向量 [A B] 表示 [尾为A的组合数 尾为B的组合数],
因为A后面只能接B,而B后面可以接A或B,所以状态转移矩阵 M 是
0 1
1 1

一次结果:A、B
[A1 B1] = [1 1]

两次结果:AB、BA、 BB
[A2 B2] = M*[A1 B1] = = [1 2]

三次结果:
[A3 B3] = M*[A2 B2] = = [2 3]

四次结果:
[A4 B4] = M*[A3 B3] = [3 5]

A1,A2,A3....An 这个数列的意义是,抛n 次,得到*非终止*序列的 而且最后一次为 A 的组合数。
只要在这些组合后面再抛一次 A 即可得到终止序列。

从上面可以看出 An 正是斐波那契数 F(n),可以直接代入通项公式。

所以抛 n 次得到终止序列的概率为 F(n-1)/2^n
得到终止序列的抛硬币次数期望为:2*F(1)/2^2 + 3*F(2)/2^3 + 4*F(3)/2^4 + ....

Shuo Chen

unread,
May 13, 2009, 5:54:54 AM5/13/09
to TopLanguage
赞状态转移矩阵!

James Z.M. GAO

unread,
May 13, 2009, 6:57:30 AM5/13/09
to TopLanguage
A_n是斐波那契数有组合意义, 只要讨论前两个次试验的情况, 如果第一次是B,
后面构成A_(n-1)结构, 如果第一次是A, 则第二次必须是B,
于是后面构成A_(n-2)结构, 于是在考察一下A_1和A_2就可以了.

对于期望的计算, 可以考虑生成函数.


G(x) = F(1)/2^2 * x^2 + F(2)/2^3 * x^3 + F(3)/2^4 * x^4 + ...
将递归关系带入得到
G(x) = x/(4-2x-x^2)

于是那个无限求和的期望就等于 G'(1)=4.
注意这个期望是最后两次A之前的试验次数, 故加上最后两次A就是期望6了.

chaoyan ma

unread,
May 13, 2009, 9:50:09 PM5/13/09
to pon...@googlegroups.com
      好像状态转移图也可以哦,在0101……序列中匹配11字符串
     A B  C Z状态分别代表匹配了0个1 1个1 和2个1的状态
    初始化进入A或B状态  A匹配到1转移到B A匹配到0转移到A  B匹配到1转移到C  B匹配到0转移到A
    是不是能这样说?在图中转移次数总共是6次   转移到A的次数是3次 占1/2    转移到B的次数是2次 占1/3  转移到C的次数是1次 占1/6
   所以   平均抛6次能到11状态??
2009/5/13 Shuo Chen <gian...@gmail.com>

millky

unread,
May 13, 2009, 10:46:15 PM5/13/09
to TopLanguage
答案应当是(2/p)
例如,当p=0.5的时候,则为4次。
推导过程:
E=2*p^2 + 3*p*2p*(1-p) + 4*p*3p*(1-p)^2 +...+ t*p*(t-1)*p*(1-p)^(t-2)
+ ...
最后一项表示,需要抛t次的概率是,最后一次必须为字,概率是p,而前面t-1次任选一次为字,概率是(t-1)*p,其它的t-2次均不为字,概率为
(1-p)^(t-2)。
对无穷级数求和,通过两次求导的方法很容易得到,E=2/p

On 5月14日, 上午9时50分, chaoyan ma <chaoyan...@gmail.com> wrote:
> 好像状态转移图也可以哦,在0101......序列中匹配11字符串


> A B C Z状态分别代表匹配了0个1 1个1 和2个1的状态
> 初始化进入A或B状态 A匹配到1转移到B A匹配到0转移到A B匹配到1转移到C B匹配到0转移到A
> 是不是能这样说?在图中转移次数总共是6次 转移到A的次数是3次 占1/2 转移到B的次数是2次 占1/3 转移到C的次数是1次
> 占1/6
> 所以 平均抛6次能到11状态??

> 2009/5/13 Shuo Chen <giantc...@gmail.com>

> 离你越近的地方,路途越远;最简单的音调,需要最艰苦的练习- 隐藏被引用文字 -
>
> - 显示引用的文字 -

Lambda

unread,
May 14, 2009, 9:05:37 AM5/14/09
to TopLanguage
你忽略了有句话:直到'连续'出现两次字为止

我觉得应该是:

E[X] = 2p^2 + 3p^2(1-p) + 4p^2(1-p)^2 + ... + np^2(1-p)^(n-2)

就是求级数忘记了 :(

李平新

unread,
May 14, 2009, 2:38:46 AM5/14/09
to pon...@googlegroups.com
试验证明 6 是正确结果

当然,我没有抛 10000次硬币
而是for了10000次
-----------------------------------------------------------------
//CoinTest.java
import java.util.Random;

public class CoinTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Random r = new Random();
        int sum = 0;
        for(int j=0;j<10000;j++){
            int count=1;
            int first =0,tmp;
            do{
                tmp = r.nextInt(2);
                System.out.print(tmp);
                if(first==1 && tmp ==first)break;
                first=tmp;
                count++;
            }while(true);
            System.out.println("\nCount"+count);
            System.out.println("-----------------------------");
            sum+=count;
        }
        System.out.println("average "+sum/10000);
    }

}
----------------------
......
-----------------------------
0010101001011
Count13
-----------------------------
011
Count3
-----------------------------
1010011
Count7
-----------------------------
average 6

李平新

unread,
May 14, 2009, 2:39:21 AM5/14/09
to pon...@googlegroups.com
纠正:实验,不是试验

2009/5/14 李平新 <xiny...@gmail.com>

chaoyan ma

unread,
May 14, 2009, 7:15:39 AM5/14/09
to pon...@googlegroups.com
??好像求的是连续的出现2个1吧
你好像求的是非连续的情况……
其实 哪个状态转移的 我也不知道对不对 觉得边界条件有点怪怪的    初始进入A或B状态 这个不知道怎么处理才比较合适
可能需要用正确数据进行纠正
我是按照
Shuo Chen 发送至 TopLanguage
显示详细信息 5月13日 (2 天前) 回复
 
好吧,我把这个结果解释一下,假设平均抛x次结束游戏。
如果第一次抛的是'0',那么再抛x次就能结束游戏(因为第一个'0'对后面抛的没有影响),一共抛x+1次;
如果第一次抛的是'1',那么头两次抛有两种情况,'11'和'10':
   抛出'11'已经结束游戏,一共抛2次;
   抛出'10'则还需要抛x次才能结束(因为第2次抛出'0'相当于把前面的结果清空了),一共抛x+2次。
这样可以列出:
x = 0.5(x+1) + 0.25*2 + 0.25*(x+2)
解出 x = 6.
 
这个当作正确答案来推理 纠正的
 
2009/5/14 millky <millk...@gmail.com>
Reply all
Reply to author
Forward
Message has been deleted
0 new messages