在if子句中找到复杂性

时间:2014-01-20 21:53:56

标签: algorithm complexity-theory time-complexity asymptotic-complexity

假设我有一个if子句

if (!f(x))
{
   g(x);
}

f(x)= O(x ^ 3)的复杂度和g(x)= O(x ^ 2)的复杂度。 在这种情况下,整体复杂性是多少? O(x ^ 5)?还是O(x ^ 3)?

我想增加问题的大小。

while(z(x))
{
  for(p(x))
  {
     if (!f(x))
     {
       g(x);
     }
  }
}

其中,z(x)= O(x ^ 5),p(x)= O(x),f(x)= O(x ^ 3),g(x)= O(x ^ 2)

3 个答案:

答案 0 :(得分:5)

总复杂度为 O x 3 ),因为您有 x 3 < / sup>操作遵循(可能) x 2 操作。前者支配后者: O x 3 )+ O x 2 )= O x 3 )。

答案 1 :(得分:0)

您需要记住'O'复杂性表现出该算法的上限。考虑最糟糕的情况(上限)。

在你的第一种情况下,如果你的'if'条件成功,复杂性将是O(x3)+ O(x2),这将等于O(x3)。因为如果条件将执行一次所以你试图加起来订单,最高顺序将定义上限。

现在在你的第二个例子中。循环将使它们的顺序与它们所覆盖的代码相乘。因此复杂性将是O(x5) O(x)(O(x3)+ O(X2))。其上限为O(X8)。

答案 2 :(得分:0)

对于第一个示例,它是O(x^3),因为O(x^3)在big-O表示法中超过O(x^2)。第二个例子O(infinity),因为你不知道while循环何时结束,它可能会继续如此大 - O是O(infinity)。它的下限是O(x ^ 5),因为它可能在while

的第一次迭代中变为false