问题:袋子中有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)的每一个格子中,求
- 某指定的n个格子中各有一个球的概率P(A)
- 任何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
"""