rm /blog

IT系技術職のおっさんがIT技術とかライブとか日常とか雑多に語るブログです。* 本ブログに書かれている内容は個人の意見・感想であり、特定の組織に属するものではありません。/All opinions are my own.*

ストレイテナーと確率9(7の続き)

ストレイテナーと確率7では、
”「シャッフルで曲選択していって60分でリセット」を繰り返したら手持ちの曲全部聴き終わるまでにどんだけかかるんだ?”というのを検証した。
結果的にそのときは95回の「60分シャッフル」を繰り返すことで手持ち全曲を聴き終えたのだが、
確率の問題なので100回を超える時もあるし70回で終わるときもある。
ではその平均(最も頻度の高い回数)はどこなのか?というのは前回の終わりで疑問になっていた。
で、今回それを検証してみようと思い立ち、前回のプログラムを少し改造して実行してみた。


 

 
シミュレーション用のプログラムはほぼ前回の流用なので省略する。
簡単に言えば前回の(3)を何度も呼び出すようなループを上位に一つつけただけである。
前回は「60分シャッフルで聴き終わる」を1回やって終了するものだったが、
これを規定回数繰り返して結果の情報を大量に採取するように改造した。
この規定数はとりあえず10万回とした。
⇒当初100万にしていたのだが予想以上に時間がかかったので10万に変更した。
10万回でのシミュレーション実行時間は約6分程度であった。
ただ、確率により変動するため、これもあくまで一例である。(10分以上かかるときもあるだろう)

結果がこれ↓

終了までの回数 その回で完了した試行合計数
53 2
54 1
55 3
56 10
57 11
58 18
59 37
60 55
61 87
62 116
63 141
64 181
65 224
66 284
67 376
68 505
69 588
70 675
71 791
72 914
73 1014
74 1137
75 1254
76 1369
77 1551
78 1629
79 1656
80 1826
81 1973
82 2040
83 2003
84 2124
85 2176
86 2290
87 2315
88 2304
89 2259
90 2255
91 2265
92 2244
93 2319
94 2217
95 2207
96 2107
97 2127
98 2121
99 1982
100 1976
101 1897
102 1754
103 1778
104 1635
105 1603
106 1581
107 1497
108 1508
109 1356
110 1359
111 1294
112 1221
113 1142
114 1093
115 1059
116 1079
117 946
118 855
119 911
120 796
121 701
122 722
123 688
124 661
125 606
126 599
127 565
128 532
129 513
130 491
131 462
132 445
133 391
134 358
135 374
136 341
137 331
138 296
139 302
140 256
141 239
142 266
143 217
144 226
145 188
146 166
147 190
148 147
149 145
150 144
151 132
152 143
153 108
154 120
155 103
156 102
157 106
158 83
159 95
160 65
161 93
162 73
163 69
164 56
165 45
166 71
167 51
168 52
169 46
170 45
171 40
172 36
173 42
174 36
175 41
176 22
177 20
178 19
179 20
180 27
181 20
182 21
183 17
184 20
185 13
186 20
187 18
188 17
189 17
190 10
191 12
192 9
193 10
194 6
195 15
196 7
197 8
198 5
199 8
200 7
201 6
202 5
203 5
204 4
205 3
206 3
207 4
208 4
209 2
210 2
211 4
212 4
213 6
214 5
215 1
216 2
217 2
219 3
220 3
221 3
223 1
226 1
227 3
230 1
231 3
232 2
233 2
237 1
238 1
239 1
252 1
255 2
257 1
267 1
271 1
276 1


「その回で完了した試行合計数」の総和を取ると上述した規定回数の10万になる。

赤太字にしてわかるようにしてあるが、
「その回で完了した試行合計数」の最大は2319回で、該当する最頻値は93回だった。
前回10回分の平均値をとって97.5という値を算出しているが、そこよりは少し低い値になっているものの、大体近い値だったという考察になりそうである。
前回の結果として載せてある「95回で聴き終る」というのもおおよそ平均に近い。

数値を見ればなんとなく想像がつくが、これをグラフにすると以下のようになる↓

straightener_simulation9_graph.jpg

少し右側に伸びているが、いわゆる正規分布に近い形をしていることがわかる。
山なりになっている部分の山頂付近を示す値が上述した「93回で聴き終った」に該当する部分にあたる。



60分で聞ける曲数は大体14~15曲であることがストレイテナーと確率2からわかっているので、
(有り得ないはずだが)60分シャッフルの各回がそれぞれ重複することなくストレートに聴き終えた場合、
257/15=17.13333333…が大体の理論上の最低値になるわけか。
今回のシミュレーション結果では最小値は53回であるが、この値は53/17.1333…で、理論値のおおよそ3倍にあたる。
要するに、53回の60分シャッフル内での重複は1曲平均多くても3回程度だった、というように考察できるわけか…?
平均的に93回で聴き終るというのであれば60分シャッフル繰り返し内での重複回数は93/17.1333…で大体5.42…になるので、
1曲平均5回から6回は重複している計算になる。
そう考えると半分近い重複で済んでいる計算になるからやっぱりレアケースだったのだろう。
今回は60分シャッフルを10万回実行しているが、この回数を増やしていくと最終的には理論的な最小値の17.1333…あたりを記録するケースもあるのだろうが、
その場合はどれほどの回数の実行が必要なのか…気が遠くなる。
この「10万回」はintで指定しているが、intどころかlong型でも対応できないくらい天文学的に大きな数値を必要としそうだ。
(もちろん確率の問題だから10万どころか極論1でも”起こり得る”のは事実なのだが)

なお、今回のシミュレーションの最大値は276回となっているが、
上述したようにこの検証には理論的に最小値が決められている一方で、
運が悪いと何回やっても「前までに聴いた曲」になるから理屈でいえば最大値には歯止めがない(いくらでも大きくなり得る=∞になり得る)。
今回の検証は60分シャッフルを10万回繰り返したわけだが、
恐らくこの回数を100万、1000万…と増やしていくと、つられてこの「最大値」もどんどん大きくなるだろう。
今回のグラフの右側(最大値方面)が粘り強く広がっているのにはこうした事情もあるはずだ。