小编典典

大O符号作业-代码片段算法分析?

java

对于作业,我得到了以下8个代码段,以分析并给出运行时间的Big-Oh表示法。有人能告诉我我走的路是否正确吗?

//Fragment 1
for(int i = 0; i < n; i++)
    sum++;

我在想片段1的O(N)

//Fragment 2
for(int i = 0; i < n; i+=2)
    sum++;

片段2也为O(N)

//Fragment 3
for(int i = 0; i < n; i++)
    for( int j = 0; j < n; j++)
        sum++;

片段3的O(N ^ 2)

//Fragment 4
for(int i = 0; i < n; i+=2)
    sum++;
for(int j = 0; j < n; j++)
    sum++;

片段4的O(N)

//Fragment 5
for(int i = 0; i < n; i++)
    for( int j = 0; j < n * n; j++)
        sum++;

片段5的O(N ^ 2),但是n * n让我有点失望,所以我不太确定

//Fragment 6
for(int i = 0; i < n; i++)
    for( int j = 0; j < i; j++)
        sum++;

片段6也为O(N ^ 2)

//Fragment 7
for(int i = 0; i < n; i++)
    for( int j = 0; j < n * n; j++)
        for(int k = 0; k < j; k++)
            sum++;

片段7的O(N ^ 3),但n * n再次让我失望

//Fragment 8
for(int i = 1; i < n; i = i * 2)
    sum++;

片段8的O(N)


阅读 209

收藏
2020-10-18

共1个答案

小编典典

我认为片段5是O(n ^ 3),类似地,片段7是O(n ^ 5)*。对于片段8,它看起来也像O(log(n))。

对于n * n问题,您必须执行循环主体n * n次,因此它将是O(n ^
2),然后将其与其他代码的顺序进行复合。片段8实际上使计数器加倍而不是增加计数器,因此问题越大,您要做的额外工作就越少,所以它是O(log(n))

*编辑: 片段7是O(n ^ 5),而不是我以前认为的O(n ^ 4)。这是因为j 和k 都从1变为n * n。对不起,我没早点听说。

2020-10-18