函数返回特定值的概率

时间:2016-02-03 19:56:26

标签: python sum probability

我无法理解为所请求的以下概率值找到数学表达式的方法。我得到了一个Python函数,定义为:

def randomFunction(n):
    return sum([random.choice([-1,1] for _ in range(n)])

然后要求找到以下概率值:

  1. randomFunction(25)将返回4
  2. randomFunction(25)将返回3
  3. randomFunction(6000)将返回0(准确的“分析估计”,不基于模拟结果)
  4. 我为所有三种概率创建了一个蒙特卡罗模拟,以便能够仔细检查我的工作;但是,我不确定如何以数学方式解决这个问题。

    我认为第三个问题需要斯特林的近似,因为它被称为“分析估计”。我认为与我如何找到成功的数量以确定概率之间存在脱节。最后,我能够通过推理解决第一个问题,即它的概率为0.0,这是因为当加入和/或减去奇数次数±1时,偶数不能求和。

    我觉得这是一个非常基本的问题;但是,我似乎错过了如何处理这个问题。任何帮助/方向将不胜感激!

    我的模拟如下,如果有人有兴趣:

    import random
    
    # Initialize Counters
    count4 = 0
    count3 = 0
    count0 = 0
    
    # Function that 
    def randomFunction(n):
        return sum([random.choice([-1,1]) for _ in range(n)])
    
    ### Simulation for Sum 4 ###
    for x in range(10**4):
        if randomFunction(25) == 4:
            count4 += 1
    
    print "Sum 4 Count: ",count4
    print "P(Sum 4): ",float(count4)/10**4
    ############################
    
    ### Simulation for Sum 3 ###
    for x in range(10**4):
        if randomFunction(25) == 3:
            count3+=1
    
    print "Sum 3 Count: ",count3
    print "P(Sum 3): ",float(count3)/10**4
    ############################
    
    ### Simulation for Sum 0 ###
    for x in range(10**4):
        if randomFunction(6000) == 0:
            count0+=1
        if x%1000==0: # Progress update every 10%
            print str((float(x)/10**4)*100)+"%"
    
    print "Sum 0 Count: ",count0
    print "P(Sum 0): ",float(count0)/10**4
    ############################
    

1 个答案:

答案 0 :(得分:1)

(1)为了使randomFunction(25)返回4,除了11 s的相同数量外,它必须生成四个-1

如果要生成总共25个数字,那么它需要获得相等数量的1 s和-1 s 25-4 = 21剩余数字。这在数学上是不可能的。因此,答案是0

(2)让我们使用相同的逻辑:你需要十四1 s和十一-1 s。现在,有2^25种可能的方法可以生成1中25个-1randomFunction的列表;并且你需要25个中的11个是一个特定的数字(尽管11个数字并不重要)。因此,有25choose11种获取这11个数字的方法。超!现在,您需要计算的只是25choose11 / 2^25

(3)与以前相同的逻辑:您现在需要3000 13000 -1 s。所以,计算6000choose3000 / 2^6000