Big o 大O表示法代码算法分析作业

Big o 大O表示法代码算法分析作业,big-o,time-complexity,Big O,Time Complexity,我被要求找到复杂性类,我不确定我应该使用大欧米茄符号还是大O?但是我假设它是O(N/2),如果我去掉常数,它就是O(N) for(int i=N; i>0; i=i/2) irrelevant statement; 对于(int i=0;i对于第一个,如果你加倍N,会执行多少操作?对于第一个,如果加倍N,会执行多少操作?关于第二个,你是对的。第一个是O(logN),第二个是O(N^2)但是有一个但是。你所说的无关语句可能非常相关。例如,如果该语句是在O(N)中工作的函数调用,

我被要求找到复杂性类,我不确定我应该使用大欧米茄符号还是大O?但是我假设它是O(N/2),如果我去掉常数,它就是O(N)

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

对于(int i=0;i对于第一个,如果你加倍N,会执行多少操作?

对于第一个,如果加倍N,会执行多少操作?

关于第二个,你是对的。第一个是O(logN),第二个是O(N^2)但是有一个但是。你所说的
无关语句可能非常相关。例如,如果该语句是在O(N)中工作的函数调用,那么复杂性将分别变为O(N*logN)和O(N^3)。因此,如果
无关语句
是O(1),你是对的.

关于第二个语句,你是对的。第一个是O(logN),第二个是O(N^2)。但是有一个但是。你所说的
无关语句可能非常相关。例如,如果该语句是一个函数调用,反过来又在O(N)中工作,那么复杂性将变成O(N*logN)和O(N^3)因此,如果
无关语句是O(1),那么您是对的。

第一个语句的复杂性等级是O(log2(n)),因为当您将n加倍时,它只会增加一个操作


第二个是O((n^2)/2),或者仅仅是O(n^2)。理解这一点最简单的方法是将它想象成一个形状。你有两个for循环,所以你知道最终的复杂度是n^2,但随着第一个循环的继续,第二个降低到零。这实际上创建了一个三角形。

第一个循环的复杂度等级为O(log2(n)),当您将n加倍时,它只会再添加一个操作


第二个是O((n^2)/2),或者仅仅是O(n^2)。理解这一点最简单的方法是把它想象成一个形状。你有两个for循环,所以你知道最终的复杂度是n^2,但随着第一个循环的继续,第二个循环的复杂度降低到零。这实际上创建了一个三角形。

如果n增加了一倍,你还需要再做一次运算??史蒂文:对,所以复杂度不能是O(n),因为这意味着操作的数量与N成正比。如果N增加一倍,你将有一个更多的操作??史蒂文:是的,所以复杂性不可能是O(N),因为这意味着操作的数量与N成正比。在重新阅读第二个代码片段后,我将我的假设改为O(N)*O(N-1)而不是O(N)*O(N+1),因为嵌套循环的迭代次数比第一个循环少一次,这是正确的吗?因此应该是O(N(N-1))==O(N^2-N)==O(N^2)?删除了我的原始注释,因为我误读了第一个循环。确实是O(log2(N))在重新阅读第二个代码片段后,我将假设改为O(N)*O(N-1),而不是O(N)*O(N+1)因为嵌套循环的迭代次数比第一个循环少一次,这是正确的吗?因此应该是O(N(N-1))==O(N^2-N)==O(N^2)?删除了我的原始注释,因为我误读了第一个循环。它确实是O(log2(N))
for (int i=0; i<N; i++)  
    for (int j = i+1; j<N; j++)  
        irrelevant statement;