具有多个条件的for循环的大O.

时间:2018-01-26 14:54:45

标签: java big-o

我不知道之前是否曾经问过这个问题,因为我不确定如何制定我的搜索,但我会尝试。下面这段代码的大O是什么?

BEGIN
    IF EXISTS (SELECT X FROM #temp WHERE X IS NULL) 
        insert into a
        select * from b
END

我看到的方式是第1,2和4行是O(1)。然后第3行是O(N),因为每次调用时都没有相同的时间。列表的大小将影响迭代量。这意味着整个代码块最终为O(N)。或者这完全是胡说八道?

2 个答案:

答案 0 :(得分:5)

列表创建不一定是O(1),可以是O(N)。

第2行显然是O(1)。

我认为循环也是O(1),因为它限制为75000个条目,所以有一个上限。如果没有i< 75000限制,那就是O(N),正如你所说的那样。

所以第2-4行我说是O(1),第1行真的取决于你省略的列表创建过程。

答案 1 :(得分:0)

一切都取决于List的实施。

初始化(.1)和list.size().3)可能会有不同的复杂性。

创作可能有任何复杂性。

如果list.size()不是O(1),那么循环将是二次的 - O(n^2)。例如,对于ConcurrentSkipListSet