我对以下内容的复杂性感到困惑(内循环内部执行的操作是在恒定时间内):
for(int i=0; i<n; i++)
for(int j=i; j<n; j++)
这是O(n ^ 2)还是O(n)?我想O(n ^ 2)。有什么想法吗?
以下内容让我很好奇:
for(int i=0; i<n; i++)
for(j=0; j<i; j++)
答案 0 :(得分:12)
当然绝对是O(n squared)
。这两种情况的摘要解释:1 + 2 + ... + n是n(n+1)/2
,即(n squared plus n) / 2
(在big-O中我们丢弃第二个,较小的部分,所以我们留下了n平方/ 2当然是O(n squared)
)。
答案 1 :(得分:3)
你是对的,那些嵌套循环仍然是O(n ^ 2)。实际操作次数接近(n ^ 2)/ 2,在丢弃常数1/2因子后,为O(n ^ 2)。