10曲のうち毎日ランダムに3曲聴くと,全部の曲を聴くのに何日かかるかをJulia で考えてみた!
問題
ある学校では昼休みにA,B,C,D,Eの5種類の曲の中から3種類ランダムに選んで放送をする。
実際に解くと,確率は
となります。
julia
で計算してみます。
コード
using Combinatorics
function prob1(k,N)
a=collect(combinations(1:5, 3)) # 1,2,3,4,5から3数を選ぶ
s=0
for i = 1:N
c = rand(a, k)# 1,2,3,4,5から3数を選ぶことをk回繰り返す。
d = collect(Iterators.flatten(c)) #cを平坦化
e = union(d) #dの共通部分をとる。
f = length(e) #dの要素の個数
if f == 5
s += 1
end
end
println(k,"日間で全ての曲がかかる確率の実験値は",s/N,"で,理論値は",1-2*(2/5)^(k-1)+(1/10)^(k-1))
end
3日間で全ての曲がかかるかどうかを100回調べて,その割合を求める。
prob1(3,100)
3日間で全ての曲がかかる確率の実験値は0.71で,理論値は0.69
1~10日間で全ての曲がかかるかどうかを100万回調べて,その割合を求める。
@time for i =1:10
prob1(i,1000000)
end
1日間で全ての曲がかかる確率の実験値は0.0で,理論値は0.0
2日間で全ての曲がかかる確率の実験値は0.299848で,理論値は0.29999999999999993
3日間で全ての曲がかかる確率の実験値は0.689425で,理論値は0.69
4日間で全ての曲がかかる確率の実験値は0.872635で,理論値は0.873
5日間で全ての曲がかかる確率の実験値は0.948784で,理論値は0.9489
6日間で全ての曲がかかる確率の実験値は0.979672で,理論値は0.9795299999999999
7日間で全ての曲がかかる確率の実験値は0.991851で,理論値は0.991809
8日間で全ての曲がかかる確率の実験値は0.996678で,理論値は0.9967233
9日間で全ての曲がかかる確率の実験値は0.998683で,理論値は0.9986892900000001
10日間で全ての曲がかかる確率の実験値は0.999494で,理論値は0.9994757129999999
7.960092 seconds (119.78 M allocations: 11.636 GiB, 7.67% gc time)
8秒くらいですね。これでいいかな。
せっかくなので,10曲あって,毎日3曲ずつ聴くと,何日くらいで全部聞けるか考えてみます。
とりあえず,95%を超える日数を探ります。
function prob2(k,N)
a=collect(combinations(1:10, 3)) # 1~10から3数を選ぶ
s=0
for i = 1:N
c = rand(a, k)# 1~10から3数を選ぶことをk回繰り返す。
d = collect(Iterators.flatten(c)) #cを平坦化
e = union(d) #dの共通部分をとる。
f = length(e) #dの要素の個数
if f == 10
s += 1
end
end
println(k,"日間で全ての曲がかかる確率の実験値は",s/N)
end
@time for i =1:10
prob2(i,1000000)
end
1日間で全ての曲がかかる確率の実験値は0.0
2日間で全ての曲がかかる確率の実験値は0.0
3日間で全ての曲がかかる確率の実験値は0.0
4日間で全ての曲がかかる確率の実験値は0.014898
5日間で全ての曲がかかる確率の実験値は0.088279
6日間で全ての曲がかかる確率の実験値は0.218858
7日間で全ての曲がかかる確率の実験値は0.372286
8日間で全ての曲がかかる確率の実験値は0.51859
9日間で全ての曲がかかる確率の実験値は0.641596
10日間で全ての曲がかかる確率の実験値は0.739303
8.939245 seconds (125.76 M allocations: 12.377 GiB, 6.57% gc time)
おっと,10日ではまだ74%だ。もう少し調べてみる。
@time for i =11:20
prob2(i,1000000)
end
11日間で全ての曲がかかる確率の実験値は0.812531
12日間で全ての曲がかかる確率の実験値は0.866424
13日間で全ての曲がかかる確率の実験値は0.905336
14日間で全ての曲がかかる確率の実験値は0.933101
15日間で全ての曲がかかる確率の実験値は0.952614
16日間で全ての曲がかかる確率の実験値は0.966809
17日間で全ての曲がかかる確率の実験値は0.97703
18日間で全ての曲がかかる確率の実験値は0.983837
19日間で全ての曲がかかる確率の実験値は0.988606
20日間で全ての曲がかかる確率の実験値は0.991889
15.302902 seconds (149.98 M allocations: 20.561 GiB, 6.28% gc time)
15日聞けば95%以上の確率で10曲全部聴けることになる! なるほど!
Discussion