所有条件检查都是不变的大O?

时间:2012-10-21 04:57:48

标签: big-o

如果函数具有O(N)复杂度并且在if语句中调用它仍然是O(1)?

例如:

  f(x);
   if (f2(x))
     f3(x);

其中f(x)为O(N)f2(x)为O(N)且f3(x)为O(Nlog2N)。

在条件为真的最坏情况下,这个片段的总体复杂度是O(Nlog2N)吗?

3 个答案:

答案 0 :(得分:1)

Big O返回时间复杂度或算法空间的上限(最差情况)。

  

条件语句是O(1)。

if (f2(x))可以写成

boolean b = f2(x);
if(b){...}

因此,上面的条件有O(1),而高于它的f2(x)的评估是O(N)。 因此该集合将具有O(N)复杂性。


你会把最坏的情况,条件评估转为真,然后计算它。 O(Nlog2N)将是您问题中该块的整体复杂性。

<强> (Rules)

答案 1 :(得分:1)

是。这是最糟糕的情况。 在一种情况下,它是o(n)和其他情况o(N lg n)。

因此,既然我们对最坏的情况感兴趣,我们会说它是后者。

答案 2 :(得分:0)

Big-O是一个上限,因此片段f1(); if(f2()) f3();O(f1 + f2 + f3)。在不知道任何其他事情的情况下,这将是最好的结果(因为你必须假设最坏情况的行为)。

但是,如果证明 f2为假(例如,因为您已经到达分析中数据结构的末尾),则可以将其降低到{{1 }}。这有时是必要的,例如在分析递归算法的基本情况时。