概率难题,游戏的预期收益

时间:2012-04-29 07:23:25

标签: python puzzle probability

这是昨天在面试街上完成的编程竞赛中的一个问题:

爱丽丝和鲍勃玩游戏。第i轮(i> = 1)的操作如下:

  • Alice向Bob支付2 * i - 1美元,
  • 爱丽丝扔了一个有偏见的硬币,
  • 如果硬币的结果是连续k轮,则游戏停止,否则游戏继续。

考虑到k和投掷结果的可能性(p),你的程序应该找到Alice支付Bob的预期数量,以及预期的轮数。

输入

  

第一行输入包含多个测试用例(T <= 50)。每个   接下来的T行包含由单个空格分隔的p和k。 p是一个   十进制数,小数点后最多两位数   0.6 <= p <= 1.k是正整数,使得0

输出

  

对于每个测试用例,打印两个整数。第一个数字是   整数部分预期的游戏轮数,第二轮   number是预期Alice数量的整数部分   支付鲍勃。

示例输入

3

0.6 1

1 20

0.80 8

示例输出

1 3

20 400

24 976

我已经解决了问题的第一部分,即预期的游戏轮数。我用以下代码获得了它

if __name__ == '__main__':
    t = int(raw_input())   
    while t :
        t -= 1
        temp = str(raw_input())
        p,k = temp.split(' ')
        p = float(p)
        k = int(k)

        #print p,k
        ans  = 0.0
        num = k * (p**k)
        den = 1
        q = 1.0 - p
        for N in range(1,k+1):
            den = den - ((p**(N-1))*q)
            num = num + (N*(p**(N-1))*q)
            #print (N*(q**N))

        print int(num/den)

但问题的第二部分仍然令我感到困惑,即爱丽丝付出的预期美元数量。如何计算预期收益?

1 个答案:

答案 0 :(得分:3)

即使您知道预期的轮数,您也需要对所有可能的支出进行平均而不是它们发生的概率。这意味着它比在预期的停止时间计算支出更复杂。以下是细节:

回想一下,期望的技术定义说如果X是随机变量,那么X的期望值是X(w)* Pr(w)的所有可能结果w的总和。如果X取正整数值,我们可以将其改为,因为X的期望值是i = 1到i * Pr(X = i)的无穷大之和。在你的情况下,我们处理的随机变量是T =游戏停止的时间,P =支付。

预期的轮数是T的期望,T是从i = 1到i * Pr(T = i)的无穷大的总和。由于它们只询问期望的整数部分,所以一旦i * Pr(T = i)小于1/2 ^ i,我们就可以停止求和。 (当i * Pr(T = i)<1/2 ^ i时,停止求和的想法是1/2 ^ i总和为1,但你可能需要调整它以避免低估。)

P的期望稍微复杂一些。如果游戏持续j轮,那么支付将是从i = 1到j为2i-1的总和,结果是j ^ 2。因此,仅可以发生形式j ^ 2的支付,并且Pr(P = j ^ 2)= Pr(T = j)。因此,P的期望值是从i = 1到无穷大i ^ 2 * Pr(P = i ^ 2)的和,其等于从i = 1到无穷大i ^ 2 * Pr的总和(T =一世)。同样,一旦i ^ 2 * Pr(T = i)小于1/2 ^ i,我们就可以停止求和。