我不知道之前是否曾经问过这个问题,因为我不确定如何制定我的搜索,但我会尝试。下面这段代码的大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)。或者这完全是胡说八道?
答案 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
。