【问题标题】:Big o notation for a while-loop which use random# generator as a conditions使用 random# 生成器作为条件的 while 循环的大符号
【发布时间】:2017-09-19 15:26:45
【问题描述】:
我们有在 [0.0,1000.0[
之间生成编号的 RNG
在一个while循环中,我们计数以找出产生一个编号需要多长时间。
代码:
n =0
while ( RNG1000() >= 1.0){
n =+
}
问题:
什么是 O(?)
【问题讨论】:
标签:
random
while-loop
numbers
time-complexity
notation
【解决方案1】:
变量 n 的函数 f 被称为变量 n 的函数 g 的 big-Oh - 通常表示为 f(n) = O(g(n)),或 f in O(g) - 如果存在一个 n0 使得对于所有大于 n0 的 n,f(n)
假设我们算法的运行时间是 n 的某个函数 g 的大哦。然后有一个 n0 使得对于 n > n0,我们的算法的运行时间小于或等于 g(n)。让我们选择一些固定的 n' > n0 并考虑这意味着什么:这意味着在输入 n' 时,我们的算法保证在 g(n') 步内终止。我们必须让 g(n') 是某个数字;让我们称之为t'。所以对于输入 n',我们的循环不能超过 t' 步。但这显然是错误的,因为 - 假设整个循环迭代需要 1 步 - 迭代超过 t' 步的概率是有限的但非零(假设 RNG 是真正的 RNG)。这是一个矛盾,所以我们假设运行时是 g 的大哦是错误的——也就是说,运行时没有上限。
很容易说这是 n 的 O(1),因为循环条件不依赖于 n,但鉴于上述分析,这在技术上是不正确的。这里真的没有上限。
【解决方案2】:
“大 O 表示法是一种数学表示法,它描述了当参数趋于特定值或无穷大时函数的限制行为。”
在您的情况下,变量 n 不限制函数的上限。事实上,在这种情况下没有函数(至少没有返回可重复结果的函数。)我建议没有大 O 符号来描述这一点,它是 undefined。然而,有些人可能会争辩说,最坏的情况只是 O(∞)。这里令人困惑的是,您实际上并没有使用变量 n 来约束您的行为。