如果您的代码看起来像这样,那么大O会是什么?我不确定if
语句如何影响大O.
n = some arbitrary number
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
if(i <= j)
for(k = i; k <= j; k++)
//do some simple operation
y = x+1
else
//do some simple operation
y = y+1
我不考虑编译器优化。我知道这介于O(n ^ 2)和O(n ^ 3)之间但不确定,因为if语句并不总是执行最内层的循环。
答案 0 :(得分:2)
O(N * N * N)我们可以说是O(N ^ 3)
First Loop发生了N次。 第二个循环发生N次。 那些相乘以得到O(N ^ 2)
在所有可能的N ^ 2循环中,第三个循环将运行大约一半的时间,即O(N / 2),相当于O(N)。
这就是你得到O(N * N * N)或O(N ^ 3)
的方法答案 1 :(得分:0)
事实上,您可以(几乎确切地)计算您执行的操作次数:
i:0到n-1 = N次操作
X
j:0到n-1 = N次操作
X
仅当i <= j,从i到j或其他任务O(1)
时其他任务为您提供NxN操作,然后是O(NxN)
即,如果你反转
对于每个j(0到n-1):N次操作
然后对于从0到j的每个i,你从i到j进行操作,即j-i + 1
与每个0到j操作完全相同。然后你有(j + 1)x(j + 2)/ 2次操作。
然后最后,从0到N得到Sum(j + 1)x(j + 2)/ 2,这是
1/2((N + 1)x(N + 2)/ 2 +(N + 1)^ 3/3 +(N + 1)^ 2/2 +(N + 1)/ 6)操作,所以O(N ^ 3)
也许,我忘了一些+/- 1
答案 2 :(得分:0)
答案 3 :(得分:-1)
这是O(N ^ 3)。
上一个周期运行(j - i + 1)
次。
如何手动查找此金额? 这不是火箭数学。
尝试阅读https://en.wikipedia.org/wiki/Telescoping_series
为了节省时间,为此目的使用wolframalpha更容易。