-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path202204292155.html
201 lines (180 loc) · 7.9 KB
/
202204292155.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<!-- 2024-11-12 Tue 14:49 -->
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>“三门游戏”的算法实现与启示</title>
<meta name="author" content="Mian Jie" />
<meta name="generator" content="Org Mode" />
<link rel="stylesheet" href="https://asset.nidu.city/style/org.css" />
</head>
<body>
<div id="content" class="content">
<h1 class="title">“三门游戏”的算法实现与启示</h1>
<div id="table-of-contents" role="doc-toc">
<h2>Table of Contents</h2>
<div id="text-table-of-contents" role="doc-toc">
<ul>
<li><a href="#org7dfafec">1. 三门游戏</a></li>
<li><a href="#orgac4de30">2. 算法实现</a>
<ul>
<li>
<ul>
<li><a href="#orgb629d46">2.0.1. 不交换</a></li>
<li><a href="#org26557d3">2.0.2. 交换</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="#org13db497">3. 原理</a></li>
<li><a href="#orgda0ab32">4. 另一种情况</a></li>
<li><a href="#org5d54408">5. 启示</a></li>
</ul>
</div>
</div>
<div id="outline-container-org7dfafec" class="outline-2">
<h2 id="org7dfafec"><span class="section-number-2">1.</span> 三门游戏</h2>
<div class="outline-text-2" id="text-1">
<p>
或许你早已听说过“三门游戏”,这是美国电视节目主持人蒙提 · 霍尔,在节目“一锤定音”里向参赛者提出的一个问题。
</p>
<p>
在节目中,蒙提让参赛者在三扇门中选择一扇门,其中只有一扇门后有巨额奖金,另外两扇只有“砰”的一声。参赛者选择一扇门后,蒙提会“砰”的一声打开剩下两扇中的一扇,然后问参赛者是否要用他们最初选中的门与剩下的一扇门交换。
</p>
<p>
你可以动脑筋想想如何选择,才能使获得巨额奖金的概率最大。
</p>
<p>
一种分析是,蒙提打开一扇门后,剩下两扇门存在大奖的概率都是50%,所以用不着交换。
</p>
<p>
你是这么想的吗?接下来我们将用Python模拟这个游戏。
</p>
</div>
</div>
<div id="outline-container-orgac4de30" class="outline-2">
<h2 id="orgac4de30"><span class="section-number-2">2.</span> 算法实现</h2>
<div class="outline-text-2" id="text-2">
</div>
<div id="outline-container-orgb629d46" class="outline-4">
<h4 id="orgb629d46"><span class="section-number-4">2.0.1.</span> 不交换</h4>
<div class="outline-text-4" id="text-2-0-1">
<p>
这种情况用算法非常容易实现。模拟一定次数,每次提供三个选择,让巨额奖金随机出现于其中一个,同时随机选择一个,然后验证两者是否相同即可。相同即选中了巨额奖金。
</p>
<div class="org-src-container">
<pre class="src src-python"># 在不交换的情况下
import random
wins = 0 # 胜场
for i in range(5000): # 模拟五千次
gift_num = random.randint(0, 2) # 生成奖金位置
choice_num = random.randint(0, 2) # 参赛者选择
if gift_num == choice_num: # 验证
wins += 1
print(wins / 5000) # 打印概率
</pre>
</div>
<p>
概率约为33%,毕竟是三选一嘛。
</p>
</div>
</div>
<div id="outline-container-org26557d3" class="outline-4">
<h4 id="org26557d3"><span class="section-number-4">2.0.2.</span> 交换</h4>
<div class="outline-text-4" id="text-2-0-2">
<p>
这种情况下,算法相对复杂一些,不过只要我们理清思路就可以了。
</p>
<ol class="org-ol">
<li>巨额奖金随机出现于一个位置,参赛者随机选择一个位置。这时会有两种情况:
<ul class="org-ul">
<li>参赛者选到了巨额奖金。显然,交换肯定会失去奖金,算法也就无需继续。</li>
<li>参赛者未选到巨额奖金,交换后仍有机会:</li>
</ul></li>
<li>蒙提“砰”的打开剩下两扇中的一扇门。</li>
<li>观众选择最后一扇门。</li>
</ol>
<p>
接下来是代码:
</p>
<div class="org-src-container">
<pre class="src src-python"># 在交换的情况下
wins = 0
for i in range(5000):
gift_num = random.randint(0, 2) # 生成奖金位置
choice_num = random.randint(0, 2) # 参赛者的最初选择
if choice_num == gift_num:
pass # 选中了大奖后交换必定失败,无需继续
else:
# 生成蒙提打开的门,其非观众打开的门和有大奖的门,用while实现
new_num = random.randint(0, 2)
while new_num in [choice_num, gift_num]:
new_num = random.randint(0, 2)
# 生成参赛者交换后的门,其非最初的选择和蒙提的选择,同样用while实现
final_num = random.randint(0, 2)
while final_num in [choice_num, new_num]:
final_num = random.randint(0, 2)
if final_num == gift_num: # 验证
wins += 1
print(wins / 5000) # 打印概率
</pre>
</div>
<p>
概率约为66%,差不多是不交换的两倍。为什么交换后概率会相差这么大?
</p>
</div>
</div>
</div>
<div id="outline-container-org13db497" class="outline-2">
<h2 id="org13db497"><span class="section-number-2">3.</span> 原理</h2>
<div class="outline-text-2" id="text-3">
<p>
其实,游戏背后的逻辑很简单。在蒙提总是打开一扇门的前提下,当参赛者第一次选择门时,他赢得大奖的概率是1/3。蒙提“砰”的打开一扇门后,这一概率并没有发生变化,而另外2/3的概率在其余两扇门中。其实蒙提打开一扇无大奖的门已经提供了有用的信息:他帮助在其余两扇门排除了一个选项。也就是说,2/3的概率集中到了最后一扇门中,所以参赛者应该交换!
</p>
<p>
2/3的概率在一扇门中,这似乎有些难以相信,但你不能忘了最初有三个选项。
</p>
<p>
真实节目中的大多数参赛者偏好于选择他们最初选择的门。
</p>
</div>
</div>
<div id="outline-container-orgda0ab32" class="outline-2">
<h2 id="orgda0ab32"><span class="section-number-2">4.</span> 另一种情况</h2>
<div class="outline-text-2" id="text-4">
<p>
如果蒙提是吝啬的,他可以选择打开或者不打开一扇门(在真实的节目中就是如此)。现在他打开了一扇门并给出了交换的机会,参赛者应该交换吗?
</p>
<p>
在这种情况下,参赛者不应交换!
</p>
<p>
吝啬的蒙提知道大奖的位置并想降低参赛者获胜的概率。如果参赛者未选中,蒙提就不会打开一扇门并提供机会,因为这会提高参赛者获胜的概率,此时蒙提会直接宣布游戏结束;如果参赛者选中了,蒙提提供机会就是为了让参赛者偏离大奖,所以参赛者不应交换!
</p>
</div>
</div>
<div id="outline-container-org5d54408" class="outline-2">
<h2 id="org5d54408"><span class="section-number-2">5.</span> 启示</h2>
<div class="outline-text-2" id="text-5">
<p>
如果人们对游戏规则和蒙提的决策过程不是十分清楚,就很容易掉进陷阱里。在真实世界中,我们也需要十分了解游戏规则和其他人的想法,这有助于我们做出好的决策。
</p>
<p>
然而,我们却总是关注不甚重要而忽视重要的信息,这反映了我们”主动意识“的有限性。在生活中,我们大多依靠直觉与记忆行事,这也是我们大脑的主要功能,毕竟思考是件费劲的事。
</p>
<p>
在这种限制条件下,对于不甚重要的小事,无思即行是重要的,这也是培养好习惯的益处所在。但对于重要的决策,有意识的思考是不可或缺的,比如在”三门游戏“的巨额奖金下,这时我们需要注意到我们的”潜意识“忽略的哪些信息,然后重新审慎思考。
</p>
</div>
</div>
</div>
<div id="postamble" class="status">
<p class="date">Date: 2022-04-29 Fri 21:55</p>
<p class="author">Author: Mian Jie</p>
<p class="date">Created: 2024-11-12 Tue 14:49</p>
</div>
</body>
</html>