以下算法是否在O(n)时间运行?
1
s=0
for(i=0; i<n; i++)
{
for (j=0; j<n; j++)
{
s=s+i*j;
}
s=s+1
}
这是一个O(n ^ 2),因为这里的性能与输入数据集的大小的平方成正比N
2
s=0
for(i=0; i<n; i++)
{ if (i>20)
for (j=0; j<n; j++)
{
s=s+i*j;
}
s=s+1
}
第3
s=0
for(i=0; i<n; i++)
{ if(i<4)
for (j=0; j<n; j++)
{
s=s+i*j;
}
s=s+1
}
请解释if语句如何影响O(n)?在两种情况下(#2和#3),第一个循环是O(n),如果N> 1,则第二个循环将运行。 20或N <20。分别为4。但这如何影响复杂性?这些仍然是O(n ^ 2),而if i > 20
会减少20 ^ 2次操作而减少if i < 4
4 ^ 2吗?还有Big O假设N会无限吗?
答案 0 :(得分:2)
<强> 2 强>
仍O(N^2)
。循环总共运行
20 +(N - 20)* N次迭代(并且每次迭代是常数)==&gt; O(N ^ 2)
第3 强>
O(N)
。循环总共运行
N * 4 +(N-4)次迭代(并且每次迭代是常数)==&gt; O(N)