假设我有一个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)
答案 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