while 循环的大 o 表示法,它使用 random# 生成器作为条件

Big o notation for a while-loop which use random# generator as a conditions

我们有 RNG 生成编号在 [0.0,1000.0[

之间

在一个 while 循环中,我们数数以找出产生一个小于 1.0 的号码需要多长时间。

代码:

n =0
while ( RNG1000() >= 1.0){
n =+
}

问题: 什么是 O(?)

"Big O notation is a mathematical notation that describes the limiting behavior of a function when the argument tends towards a particular value or infinity."

你的例子中的变量n不限制函数的上限。事实上,在这种情况下没有函数(至少没有 returns 可重复结果的函数。)我建议没有大 O 符号来描述这个,它是 undefined.然而,有些人可能会争辩说最坏的情况只是 O(∞)。这里令人困惑的是,您实际上并没有使用变量 n 来约束您的行为。

变量 n 的函数 f 被称为变量 n 的函数 g 的 big-Oh - 通常表示为 f(n) = O(g(n)),或 O(g) 中的 f - 如果存在一个 n0 使得对于所有大于 n0 的 n,f(n) <= g(n).

假设我们的算法的运行时间是 n 的某个函数 g 的 big-Oh。然后有一个 n0 使得对于 n > n0,我们的算法的运行时间小于或等于 g(n)。让我们选择一些固定的 n' > n0 并考虑这意味着什么:这意味着在输入 n' 时,我们的算法保证在 g(n') 步内终止。我们必须让 g(n') 是某个数字;我们称它为 t'。所以对于输入 n',我们的循环不能超过 t' 步。但这显然是错误的,因为 - 假设整个循环迭代需要 1 步 - 迭代超过 t' 步的概率是有限的但非零(假设 RNG 是真正的 RNG)。这是一个矛盾,所以我们假设运行时大 - g 的 Oh 是错误的 - 也就是说,运行时没有上限。

很容易说这是 n 的 O(1),因为循环条件不依赖于 n,但鉴于上述分析,这在技术上是不正确的。这里真的没有上限。