引言
昨天有别人有一个关于墨菲定律的争论,对方说墨菲定律是伪科学,我一时也没有找到相应的定理,于是我就用数学简单证明一下。
首先,我们要知道什么是墨菲定律。墨菲定律(Murphy’s Law)的基本思想是小概述事件一定会发生。国内因为中文翻译和个人理解的问题,这条定律的翻译和解释有很多,根据根据维基百科(Wikipedia),它的原文是:Whatever can happen will happen if we make trials enough.
,即 任何事情如果有可能会发生,那么它就一定会发生,只要试验足够多次。后来,又被简化成:If it can happen, it will happen.
,即 有可能会发生的事情一定会发生。
本来墨菲定律的意思是很清楚的,但是由于语言的问题,加之每个人的理解差异很大,在翻译成中文以后,表述的差异就很大。然后再经过人多口杂地传播,其本意已经被曲解了。以下是一些与原文出入很大的理解:
- 任何事都没有表面看起来那么简单;
- 所有的事都会比你预计的时间长;
- 如果一件事有可能被做坏,让他去做就一定会更坏。
- 你担心的事情总会发生”
这些曲解的理解,虽然意思上有相近之处,但是不推荐使用。本文讨论的墨菲定律是基于维基百科的定义,其核心思想就一条:小概率事件一定会发生,只要实验足够多次。或者反之,只要具有大于零的机率,就不能够假设它不会发生。
证明
根据维基百科的表述,我们可以使用最基本的概率学知识来证明,过程如下。
证明:设某事件
A
A
A 发生的概率为
P
(
A
)
=
p
,
其
中
0
<
p
<
1
P(A) = p,其中0<p<1
P(A)=p,其中0<p<1,则一次实验中
A
A
A 不发生的概率为
P
(
A
ˉ
)
=
1
−
p
P(\bar{A}) = 1 - p
P(Aˉ)=1−p。在实际生活中,事件A每次发生可以看作是独立的,即与其他发生情况没有关系,所以
n
n
n 次实验都不发生的概率
P
n
(
A
ˉ
)
=
P
(
A
ˉ
∩
A
ˉ
∩
.
.
.
∩
A
ˉ
)
=
(
1
−
p
)
n
P_n(\bar{A}) = {P(\bar{A}\cap \bar{A} \cap ... \cap \bar{A} )} = (1 - p)^n
Pn(Aˉ)=P(Aˉ∩Aˉ∩...∩Aˉ)=(1−p)n
由于
0
<
(
1
−
p
)
<
1
0 < (1-p) < 1
0<(1−p)<1,所以当
n
→
∞
n \to \infty
n→∞时,
P
n
(
A
ˉ
)
→
0
P_n(\bar{A}) \to 0
Pn(Aˉ)→0,即
lim
n
→
+
∞
P
n
(
A
ˉ
)
=
lim
n
→
+
∞
(
1
−
p
)
n
=
0
\lim_{n \to +\infty} P_n(\bar{A}) = \lim_{n \to +\infty} (1 - p)^n = 0
n→+∞limPn(Aˉ)=n→+∞lim(1−p)n=0
所以当
n
n
n 足够大时,
n
n
n 次实验
A
A
A 不发生的概率 0。因此,事件
A
A
A 一定会发生。
证毕。
举例
我们来看这样一个事件:两个人是同一天生日。这个事件在生活中肯定存在的,即一定有两个人是相同生日的,没有任何问题。但是问题是发生的几率有多大,以下的计算可能超出你的想象。
按每年365天计算(不考虑闰年),则两个是同一天生日的概率为:由于两个人的生日分别是独立事件,当第一个人的生日是某一天是,第二个人和他同一样的机率是 1 / 365 = 0.274 % 1/365=0.274\% 1/365=0.274%,那么他们不是同一样的概率是 1 − 1 / 365 = 364 / 365 = 99.726 % 1-1/365 = 364/365 = 99.726\% 1−1/365=364/365=99.726% ,大家可以看到同生日的概率是非常低的,和我们的直观感感知是一样的。
但是当有多个人的时候,情况就开始变化了。当有三个人第一个人生日固定,那么第二个人和他不是同一天生日,那么有364天可以选,所以概率是 364 / 365 364/365 364/365;第三个人若想不同前面两个同生日,那么还有363天可选,所以概率是 363 / 365 363/365 363/365。以此类推,当有 n n n 个人时,概率为 ( 365 − n + 1 ) / 365 (365 - n + 1)/365 (365−n+1)/365。因此, n n n 个有相同生日生日的概率为 1 − 365 365 ∗ 364 365 ∗ 363 365 ∗ . . . ∗ 365 − n + 1 365 = 365 ! 36 5 n n ! 1 - \frac{365}{365} * \frac{364}{365} * \frac{363}{365} *...*\frac{365 - n + 1}{365} = \frac{365!}{365^nn!} 1−365365∗365364∗365363∗...∗365365−n+1=365nn!365!
以下是测试1-100人的结果如下所示,可以看到57个人的时候,有两个人是同一天生日这个事件发生的概率已经达到了99%,几乎一定会发生的。如果你不相信,可以从你的通信录,或者班级,或者单位随机找57个人,你几乎一定会找到有两个人的生日是同一天。
人数 有相同生日的概率
1 0.000000%
2 0.273973%
3 0.820417%
4 1.635591%
5 2.713557%
6 4.046248%
7 5.623570%
8 7.433529%
9 9.462383%
10 11.694818%
11 14.114138%
12 16.702479%
13 19.441028%
14 22.310251%
15 25.290132%
16 28.360401%
17 31.500767%
18 34.691142%
19 37.911853%
20 41.143838%
21 44.368834%
22 47.569531%
23 50.729723%
24 53.834426%
25 56.869970%
26 59.824082%
27 62.685928%
28 65.446147%
29 68.096854%
30 70.631624%
31 73.045463%
32 75.334753%
33 77.497185%
34 79.531686%
35 81.438324%
36 83.218211%
37 84.873401%
38 86.406782%
39 87.821966%
40 89.123181%
41 90.315161%
42 91.403047%
43 92.392286%
44 93.288537%
45 94.097590%
46 94.825284%
47 95.477440%
48 96.059797%
49 96.577961%
50 97.037358%
51 97.443199%
52 97.800451%
53 98.113811%
54 98.387696%
55 98.626229%
56 98.833235%
57 99.012246%
58 99.166498%
59 99.298945%
60 99.412266%
61 99.508880%
62 99.590957%
63 99.660439%
64 99.719048%
65 99.768311%
66 99.809570%
67 99.844004%
68 99.872639%
69 99.896367%
70 99.915958%
71 99.932075%
72 99.945288%
73 99.956081%
74 99.964864%
75 99.971988%
76 99.977744%
77 99.982378%
78 99.986095%
79 99.989067%
80 99.991433%
81 99.993311%
82 99.994795%
83 99.995965%
84 99.996882%
85 99.997600%
86 99.998159%
87 99.998593%
88 99.998928%
89 99.999186%
90 99.999385%
91 99.999537%
92 99.999652%
93 99.999740%
94 99.999806%
95 99.999856%
96 99.999893%
97 99.999922%
98 99.999942%
99 99.999958%
100 99.999969%
结论
所以,即便一个事件即使发生的概率很小,只要给予足够的实验次数,那么就一定会发生。以下情况相信大家都遇到过:
- 买东西忘了带钱
- 下雨天没收衣服
- 要用某个东西的时候找不到
- 在不用的包或旧衣服里找到钱
- 手机欠费或停机
- 有点东西总是会找不到
- 打错或被别人打错电话
- 学习或工作材料忘带
- 公开场合说错话
- 被锁在屋外面
- 下雨天没带雨具或带了雨具没下雨
- ……
所以,生活中的墨菲定律是远处不在的。实际上中国古代也有相似的说法,如“常在河边走,哪有不湿脚”也表达了类似的观点。
综上所述,墨菲定律告诉我们的道理就是不要报侥幸心理,做事要认真仔细,不要忽视小概率事件对我们的影响。对我们工作,学习,生活都有很好的指导意义。
附:所使用的代码
def f1(n):
s = 366.
r = 1
for i in range(n):
s = s - 1
r *= s / 365
return 1 - r
for i in range(1, 100):
print("{}\t{:10.6%}".format(i, f1(i)))