概率论几个有意思的模型

admin 2022年5月17日02:43:35评论22 views字数 1974阅读6分34秒阅读模式

MathJax.Hub.Config({
extensions: ["tex2jax.js"],
jax: ["input/TeX", "output/HTML-CSS"],
tex2jax: {
inlineMath: [ ['$','$'], ["\\(","\\)"] ],
displayMath: [ ['$$','$$'], ["\\[","\\]"] ],
processEscapes: true
},
"HTML-CSS": { availableFonts: ["TeX"] }
});

问题:袋子中有a个黑球,b个白球,现在一只只的摸出来,求第k次摸出黑球的概率。(a ≤ k ≤ a + b)

本题有两个解法,首先考虑是有次序的,也就是排列方法,另一个就是组合解法。

排列方法的样本空间就是对a+b个球进行了全排列,也就是$(a+b)!$,然后填充第k个位置,选一个黑球,有a个选择,然后就是对(a+b-1)的位置放球,有(a+b-1)!种方法。所以得到

$$P = \frac{a × (a + b - 1)!}{(a + b)!} = \frac{a}{a + b}$$

第二种解法就是认为全部的球就两部分,黑的和白的,认为同种颜色的球之间没有区别。先把黑球放好的话,有$C_{a + b}^{a}$种方法。这个事情做完了,剩下的都是白球了。有利场合就是$C_{a + b - 1}^{a - 1}$种。所以

$$P=\frac{C_{a + b - 1}^{a - 1}}{C_{a + b}^{a}}=\frac{a}{a + b}$$

这样的话,最后的结果很重要,结果和k是没有关系的,最终的概率都是一样的,这个也是抽签的模型。这个证明显示抽签的前后顺序是不影响结果的。


现在有n个球,每个球都有相同的概率$\frac{1}{n}$落到N个格子里面(N大于等于n)的每一个格子中,求

  1. 某指定的n个格子中各有一个球的概率P(A)
  2. 任何n个格子中各有一个球的概率P(B)

要注意的是一个格子中可以放多个球。

第一问是先在N个格子中选出n个进行有重复的排列,样本空间就是$N^{n}$,比如第一个有N种方法,第二次还是N个,以后还是。
因为已经指定了n个格子,相当于n个球进行了全排列,有利场合就是$n!$。

第二问因为n个格子是任意的,首先要挑出n个格子,然后对n个球进行全排列。有利场合就是$C_{N}^{n} × n!$。结果是

$$P(B) = \frac{C_{N}^{n} × n!}{N^{n}}=\frac{N!}{N^{n}(N - n)!}$$

实际应用一下,有n个人(n < 365),每个人的生日都不一样的概率就可以套用第二问,每个格子都有一个人,而且只有一个人。n个人中至少两个人生日相同的概率就可以使用1 - P(B)


蒙提霍尔问题

问题详情参考
http://wiki.mbalib.com/wiki/%E4%B8%89%E9%97%A8%E9%97%AE%E9%A2%98

使用Python模拟就好了

# coding=utf-8
import random


# 不改变选择
def do_not_change():
    prize = ["goat", "goat", "car"]
    random.shuffle(prize)
    return prize[random.randint(0, 2)] == "car"


# 不确定改不改变
def random_selection():
    # 不确定改不改变的话,也就是在除去主持人打开的门之后再随机选择一个
    prize = ["goat", "car"]
    random.shuffle(prize)
    return prize[random.randint(0, 1)] == "car"


# 改变选择
def change():
    prize = ["goat", "goat", "car"]
    random.shuffle(prize)
    choice = random.randint(0, 2)
    prize.pop(choice)
    for i in [0, 1]:
        # 主持人选择山羊
        if prize[i] == "goat":
            prize.pop(i)
            break
    # 选择最后一个
    return prize[0] == "car"

count = 0
for i in range(100000):
    if do_not_change():
        count += 1

print u"不改变选择", count / 100000.0

count = 0
for i in range(100000):
    if random_selection():
        count += 1
print u"不确定改不改变选择", count / 100000.0

count = 0
for i in range(100000):
    if change():
        count += 1
print u"改变选择", count / 100000.0

"""
最终结果
不改变选择 0.33098
不确定改不改变选择 0.50006
改变选择 0.6637
"""

FROM :strcpy.me | Author:strcpy

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月17日02:43:35
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   概率论几个有意思的模型http://cn-sec.com/archives/1013479.html

发表评论

匿名网友 填写信息