是"&&" if语句会影响时间复杂度吗?

时间:2018-04-15 06:56:55

标签: performance if-statement time-complexity

我们只是说是否有像

这样的if语句
if(arraylist.indexOf(n) < 14 && arraylist.indexof(m) < 20) {
    doSomething();
}

if语句是O(n)还是O(n^2)? indexOf(n)的时间复杂度为O(n)。我试着在谷歌搜索答案,但似乎无法找到它。

2 个答案:

答案 0 :(得分:0)

你在这里没有语言标签,但我认为它支持短路(大多数都是)。

复杂性为arraylist.indexOf的次数2.因此,如果您正确且复杂度为O(n),则if的复杂性(假设没有电路)是O(2n)(因为你通常会通过删除常量来简化复杂性,O(n))。

答案 1 :(得分:0)

担心使用O(N)函数隐藏的性能影响并不是不合理的。但是,在这种情况下,没有额外的惩罚。当indexOf的两边都调用&&时,会出现最坏情况。在这种情况下,时间复杂度不会改变,因为O(N)最多应用两次。

我在使用连接函数时遇到了隐藏的复杂性问题,其中连接需要在附加附加数据之前遍历原始值(例如,C&#39; s strcat)。不知道遍历的调用者可能会编写一个循环来执行每次迭代的连接,而不知道这会触发时间复杂度增加的数量级。