计算时间复杂度(连续循环)

时间:2010-12-17 03:41:43

标签: time time-complexity

以下代码:

int func(int x, int y)
{
   int flag=0;

   for(flag=0; flag<x; flag++)
   {
      ....
   }

   for(flag=0; flag<y; flag++)
   {
      ....
   }

   return 0;
}

对于以下情况,时间复杂度(我的理解)是 -

x > y  => O(x+y)
y < x  => O(x+y)
x = y  => O(2x)

有人可以验证我是否正确吗?

感谢。

2 个答案:

答案 0 :(得分:1)

x&gt; y =&gt; O(x + y) - 是的。但是,如果,x = O(y),则只有O(x)。

y&lt; x =&gt; O(x + y) - 是的。上面的相同解释。

x = y =&gt; O(2x) - 不完全。您忽略了Big O分析中的常数因子。这个想法是,当x变为无穷大时,'2'或常数将对函数的增加率做出很大贡献。

x = y ^ 2 =&gt; O(y ^ 2) - Big O分析的另一个特征是你只考虑主要术语。

这里可以找到一个关于Big O分析的优秀介绍video讲座形式。查看Big O分析的第二讲。

答案 1 :(得分:0)

Big-O表示法不使用常数乘数。即,没有 O(2n),只有 O(n)。这与指数相反,通常会看到 O(2 ^ n)等。

您的函数是线性的,因此如果x == y,那么数量级就会被列为 O(x)