简单的Big-O计算

时间:2011-12-20 23:14:38

标签: big-o

我直观地意识到两个for循环产生一个O(n ^ 2)函数,但是如果循环不相关则会怎样。怎么表达

例如:

for(x = 1; x < t; x++)
    for(y = 1; y < z; y++)
            do something trivial
    end
end

是这个O(t * z)的重要组成部分?或者是O(n ^ 2)还是O(t ^ 2)。我一直忽视这一点,但我现在想知道。

由于

5 个答案:

答案 0 :(得分:7)

是O(t * z)。如果你有两个嵌套循环,每个迭代都有n ^ 2,因为n * n:)

这就像计算区域..每次迭代z次...所以它直观地t * z ..

或者你可以想象在循环中有一个计数器..结果会是多少?

答案 1 :(得分:1)

基本上它确实是O(t * z),但除非有特定的问题,否则你通常会说O(n ^ 2)。其原因很简单:假设你有t,z,其中t≠z。那么对于任何特定的t,z存在t / z,它是常数。您可以将其分解,它在表达式中变为常量,并且您有n ^ 2。对于我们的目的,O(n ^ 2)与O(t ^ 2)相同 - 说O(t ^ 2)更正确,但是大多数人会理解你使用泛型n。

<强>更新

好的,对不起,让我们再进一步了解一下。我们给出t,z,两个正自然数,t≠z,并且t和z之间没有特定的函数关系。 (是的,可能这样的关系,但它不在问题陈述中。如果我们不能做出这个假设,那么问题就无法回答:考虑,例如, z = t x 。我们不知道 x ,所以我们不能说出运行时间是多少考虑 z = s t 。如果我能断言函数关系可能存在,那么答案是不确定的。)

现在,通过检查,我们可以看到它将是O(t * z)。调用实际运行时间 f(n)= n 2 的函数。根据定义, O(f(tz))表示某些常数k> 0的运行时间 f(tz) kg(tz) 。除以z。然后 f(t)/ z (k / z)g(t),因而 f(t) kg (t)的。我们替换并获得 f(t)= t 2 并重命名变量使 O(n 2

答案 2 :(得分:1)

for(x = 1; x < t; x++)
    for(y = 1; y < z; y++)
            do something trivial
    end
end

如上所述,这些循环执行(t-1)*(z-1) = t*z - t - z + 1 times -> O(t*z)

答案 3 :(得分:0)

通常两个for循环彼此之间是O(n ^ 2),读取O n squared

答案 4 :(得分:0)

我不知道如果没有关于如何使用循环的更多信息,我会考虑这个O(n ^ 2)。

如果z总是小于或等于1,你会得到O(n)或O(1)。