Big-O和通用时间单位?

时间:2012-04-30 05:36:37

标签: for-loop big-o

我有这两个问题,我认为我理解如何回答(问题后的答案)。我只是想知道我是否理解时间复杂度计算以及如何找到BigO 通用形式只是表达式右侧每个值的乘积 BigO是多项式中最大的幂。这种思维方式是否正确?

int sum = 0;
for (int i = 0; i < n; i++)
   for (int j = 0; j < n * n; j++)
      for (int k = 0; k < 10; k++)
         sum += i;

此代码需要多少通用时间单位? n个(n ^ 2)* 10 这段代码的运行时间是多少?为O(n ^ 3)

2 个答案:

答案 0 :(得分:1)

是的,你的理解是正确的。但有时你也必须处理对数项。 查看对数项的方法可以是将其视为n ^(1 + epsilon)。其中epsilon数量很少。

答案 1 :(得分:1)

是。基本上大O的定义表明你的时间单位(正如你所说的那样)是从上面以一定的时间限制你从一些(任意高的)自然数开始到无穷大。用更多的数学符号表示:

如果存在常数C和数N,则函数f(n)是O(g(n)),使得f(n)<1。所有n的C * g(n)> Ñ

在你的上下文中f(n)= n(n ^ 2)* 10和g(n)= n ^ 3.

顺便说一句,你也可以说函数是O(n ^ 4)。您可以使用大的θ表示法来表明这也是下限:f(n)是$ \ theta(n ^ 3)。

在此处详细了解:https://en.wikipedia.org/wiki/Big_O_notation