【发布时间】:2014-01-13 08:13:38
【问题描述】:
假设我有一个简单的程序来模拟抛硬币,给定的概率由表达式指定。它可能看起来像这样:
# This is the probability that you will get heads.
$expr = "rand < 0.5"
def get_result(expr)
eval(expr)
end
def toss_coin
if get_result($expr)
return "Head"
else
return "Tail"
end
end
现在,我还要告诉用户得到Head的概率是多少。
对于给定的表达式
"rand < 0.5"
我们可以目不转睛地说概率是 50%,因为 rand 返回一个介于 0 和 1 之间的数字,因此表达式的计算结果平均有 50% 的时间为真。
但是,如果我决定提供一个被操纵的硬币投掷,用于确定结果的表达式是
"rand < 0.3"
现在,我有 30% 的机会获得Head。
是否可以编写一个方法来接受任意表达式(计算结果为布尔值!)并返回它解析为true的概率?
def get_expected_probability(expr)
# Returns the probability the `expr` returns true
# `rand < 0.5` would return 0.5
# `rand < 0.3` would return 0.3
# `true` would return 1
# `false` would return 0
end
【问题讨论】:
-
如果是家庭作业,也许是哲学 101。
-
假设(使用
require 'time')我们有t = Time.new.year == 2014; sleep(rand(5)); t。每当执行此操作时,它返回 true 的概率为零或一。今天,我们可以说真实的概率是 1.0。但是,当我们准备好在 2015 年响起时呢?get_expected_probability可能不知道这是在旧年还是新年执行。要返回 0.0 到 1.0 之间的概率,我们需要扩展模型以表示代码在 2014 年执行的概率,这个概念可以说是没有意义的。所以,我认为答案是否定的。
标签: ruby probability