我们有RNG,其产生的数字在[0.0,1000.0 [
在一个while循环中,我们计算一下,找出生成一个数字所需的时间。 1.0。
代码:
n =0
while ( RNG1000() >= 1.0){
n =+
}
问题: 什么是O(?)
答案 0 :(得分:0)
“Big O表示法是一种数学符号,用于描述当参数趋向特定值或无穷大时函数的限制行为。”
在您的情况下,变量n不限制函数的上限。实际上在这种情况下没有功能(至少没有一个功能可以返回可重复的结果。)我建议没有Big O符号来描述它,它是 undefined 。然而,有些人可能认为最坏的情况只是O(∞)。这里令人困惑的是,你实际上并没有使用你的变量n来限制你的行为。
答案 1 :(得分:0)
变量n的函数f被认为是变量n的函数g的大哦 - 通常表示为f(n)= O(g(n)),或者在O(g)中的f - 如果存在n0使得对于大于n0的所有n,f(n)<= g(n)。
假设我们算法的运行时间很大,那么n的某个函数g。然后存在n0,使得对于n> n0,我们的算法的运行时间小于或等于g(n)。让我们选择一些固定的n&#39; &GT; n0并考虑这意味着什么:它意味着在输入n&#39;上,我们的算法保证在g(n&#39;)步骤内终止。我们必须得到g(n&#39;)是一些数字;让我们称它为&#39;。因此,对于输入n&#39;,我们的循环不能超过t&#39;脚步。但这显然是错误的,因为 - 假设整个循环迭代需要1步 - 迭代的概率超过t&#39;步骤是有限的但非零(假设RNG是真正的RNG)。这是一个矛盾,所以我们假设运行时很大 - 但是g是错误的 - 也就是说,运行时没有上限。
由于环路条件并不依赖于n,所以很容易说这是n的O(1),但鉴于上述分析,这在技术上是不正确的。这里确实没有上限。