免责声明:不确定问题的标题是否准确......
假设我需要在接下来的100分钟内洗碗。我知道我必须在100分钟之后做最新的事情。我每2分钟问自己“我应该这样做吗?” (所以我总共问自己50次)。每当我问自己是否应该这样做时,我想计算一下这样做的可能性,然后确定我现在是否这样做。概率应该是如此,如果我重复实验一百万次,那么我几乎可能在2分钟,4分钟,6分钟等之后做到这一点 - 或者换句话说,均匀分布这样做的可能性。
我做了一个实验,我将个人概率设置为check_number / total_number_of_checks
但是这似乎没有给出正确的结果。有什么想法吗?
# gem install ascii_charts
require 'ascii_charts'
time_frame = 100
check_frequenzy = 2
number_of_checks = time_frame / check_frequenzy
checks = (1..number_of_checks)
result = {}
checks.each do |i|
result[i] = 0
end
10_000.times do |t|
checks.each do |check_number|
probability = check_number/number_of_checks.to_f
if rand() <= probability
# Oh no! I need to do the dishes now :-(
result[check_number] += 1
break
end
end
end
puts AsciiCharts::Cartesian.new(result.to_a).draw
#=>
950|
900| * * *
850| *
800| *
750| *
700| *
650| *
600| * *
550|
500| *
450|
400| *
350| *
300| *
250|
200| * *
150| *
100| *
50| * * *
0+----------------------------------------------------------------*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-
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
答案 0 :(得分:3)
您可以使用Bayes' Theorem计算这些条件概率。
让T
为随机变量,等于洗碗时间(以分钟为单位)。
我假设概率为&#34;线性&#34; (0到100分钟之间)你的意思是,对于任何随机变量t
:
P[T <= t] = .01*t, 0 <= t <= 100
如果在t0
时间没有洗过餐具,则在接下来的两分钟内洗碗的(有条件的)概率由下式给出:
P[T <= t+2| T > t] = P[T <= t+2 and T > t] / P[T > t]
= (P[T <= t+2] - P[T <= t]) / (1-P[T <= t])
= (.01*(t+2) - .01t) / (1-.01t)
= 2/(100-t)
P[T <= t+2| T > t]
读取,&#34; T
的概率(值)小于或等于t+2
,假设T
的值({1}}是大于t
&#34;。
因此:
P[T <= 2 | T > 0] = 2/98
P[T <= 4 | T > 2] = 2/96
...
P[T <= 98 | T > 96] = 2/4
P[T <= 100 | T > 98] = 2/2
如果你放弃线性要求,对我来说,如果我们正在谈论菜肴:
P[T <= 98] #=> 0
答案 1 :(得分:2)
鉴于N
完成任务的机会,每个机会具有1/N
的相等概率,您可以使用以下算法即时挑选随机机会。 (我不认识Ruby所以我使用了伪代码。)
for i from 1 to N
r = random integer from 0 to N-i inclusive
if r == 0
return 2*i // wash dishes now, at the ith opportunity (2*i minutes)
// otherwise continue the loop
对于N=50
的情况,这意味着第一次机会的概率为p(1) = 1/50
。之后,第二次机会有概率p(2) = 1/49
。在此之后,p(3) = 1/48
,直到p(50) = 1/1
,这意味着如果我们还没有,我们必须在最后一次机会完成任务。
我们可以确认,通过将个体概率乘以直到给定点,每个机会给出一个统一的概率。例如,有机会获得第四次机会...
49/50
48/49
47/48
1/47
根据需要,产品为49/50 * 48/49 * 47/48 * 1/47 = 1/50
。
换句话说:probability = check_number/number_of_checks.to_f
需要更改为:probability = 1.0/(number_of_checks - check_number)
这将呈现:
260| *
240| * *
220| * * * * * * * * * * * * * *
200| * * * * * * * * * * * * * * * * * * * * *
180| * * * * * * * * * * *
160|
140|
120|
100|
80|
60|
40|
20|
0+----------------------------------------------------------------------------------------------------------------------------------------------------*-
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
如果您特别好奇,即使您事先并不知道机会数量N
,您实际上也可以产生统一分布。有关如何执行此操作,请参阅reservoir sampling。