Big-O表示法算法分析作业

时间:2010-10-17 13:05:17

标签: big-o time-complexity

for(int i=N; i>0; i=i/2)  
    irrelevant statement;

我被要求找到复杂性类,我不确定我是否应该使用Big-Omega表示法或Big-O?但我假设它是O(N / 2)然后是O(N),如果我放下常数。

for (int i=0; i<N; i++)  
    for (int j = i+1; j<N; j++)  
        irrelevant statement;

对于这个我相信它是O(N)* O(N + 1) - >在I下降N?

之后,O(N ^ 2 + N)然后是O(N ^ 2)

3 个答案:

答案 0 :(得分:3)

对于第一个,如果你加倍N?

会执行多少次操作

答案 1 :(得分:2)

第一个具有复杂度类O(log2(n)),因为当你加倍时它只增加一个操作。

第二个是O((n ^ 2)/ 2),或者只是O(n ^ 2)。理解这一点的最简单方法是将其想象为一种形状。你有两个for循环,所以你知道最终的复杂性是n ^ 2,但是当第一个继续时,第二个减少到零。这有效地创建了一个三角形。

答案 2 :(得分:1)

你对第二个是正确的。第一个是O(logN),第二个是O(N ^ 2)。但是有一个但是。您所指的irrelevant statement可能非常相关。如果该语句例如是函数调用,而函数调用又在O(N)中起作用,那么复杂性将分别变为O(N * logN)和O(N ^ 3)。所以,如果irrelevant statement是O(1),你就是对的。

相关问题