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

Java 大O符号作业——代码片段算法分析?,java,big-o,Java,Big O,作为家庭作业,我得到了以下8个代码片段进行分析,并为运行时间给出了一个大的Oh表示法。有谁能告诉我我走对了吗 //Fragment 1 for(int i = 0; i < n; i++) sum++; //片段1 对于(int i=0;i

作为家庭作业,我得到了以下8个代码片段进行分析,并为运行时间给出了一个大的Oh表示法。有谁能告诉我我走对了吗

//Fragment 1
for(int i = 0; i < n; i++)
    sum++;
//片段1
对于(int i=0;i
我认为片段1是O(N)

//Fragment 2
for(int i = 0; i < n; i+=2)
    sum++;
//片段2
对于(int i=0;i
O(N)也适用于片段2

//Fragment 3
for(int i = 0; i < n; i++)
    for( int j = 0; j < n; j++)
        sum++;
//片段3
对于(int i=0;i
O(N^2)表示片段3

//Fragment 4
for(int i = 0; i < n; i+=2)
    sum++;
for(int j = 0; j < n; j++)
    sum++;
//片段4
对于(int i=0;i
O(N)表示片段4

//Fragment 5
for(int i = 0; i < n; i++)
    for( int j = 0; j < n * n; j++)
        sum++;
//片段5
对于(int i=0;i
O(N^2)表示片段5,但N*N有点让我不舒服,所以我不太确定

//Fragment 6
for(int i = 0; i < n; i++)
    for( int j = 0; j < i; j++)
        sum++;
//片段6
对于(int i=0;i
O(N^2)也适用于片段6

//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
对于(int i=0;i
O(N^3)表示碎片7,但N*N再次把我甩了

//Fragment 8
for(int i = 1; i < n; i = i * 2)
    sum++;
//片段8
对于(int i=1;i
对于片段8,我认为片段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。很抱歉,我之前没听清楚。

您似乎走对了方向。关于N*N,你认为它会有什么影响?它是N的另一个因子,所以它可能是一个更高的阶


只是一个警告,我看到了另一个这样的帖子,结果被否决了。小心。是帖子。

对于案例8,尝试写出一些N值的迭代次数,看看模式是什么样子。。。它不是O(N)

片段7是O(N^5),而不是当前接受的注释所声称的O(N^4)。否则,这是正确的。

你走在正确的轨道上,但这里有一个小提示,告诉你如何让事情变得更清楚。假设您有一些代码:

for(i = 0; i < n; i++) {
   for(j = 0; j < 100; j++){....}
}
(i=0;i{ 对于(j=0;j<100;j++){…} }

右,考虑一下你有不同级别的代码的事实。在本例中,到目前为止,您只能看到3个级别:

  • 从0-n开始的外部for循环
  • 另一个从0到100的for循环
  • 内部的一些代码,标记为
  • 在任何时候,你都不应该试图一次计算完。这是大多数初学者犯一些算术错误的地方。为每个级别单独计算,然后将其全部相乘


    祝你好运

    事实上,我对这个问题投了更高的票,因为他(1)显然认真地试图解决问题,(2)诚实地说这是一个家庭作业。哦,我绝对同意,这是对问题的一次坚实的尝试,也是一个有效的问题。我只是想警告他,以防别人反应不好。虽然在这种情况下,他应该没事。哦,好吧,我明白你的意思了!所以对于5,n*n意味着内环的主体将以n^2的顺序执行,对于外环,将其与n的顺序混合,总的来说,它将是O(n^3)。对于片段7,同样的想法。伙计,碎片8完全在我头上。抱歉,如果这要求太多,但我只是好奇,如果我遇到O(Nlog(N))的代码会是什么样子?对于O(Nlog(N))算法,想象一个从1到N计数的外循环和一个通过每次将计数器乘以2从1到N的内循环。然而,遇到这样的算法是极不寻常的。最常见的O(nlog(n))算法是快速排序和合并排序。好的,所以基本上,如果我在片段8周围放置一个外部(1到n)循环,我将得到一个O(n*log(n))算法,因为外部O(n)循环和内部O(log(n))将复合形成它。谢谢你的帮助!仔细的片段7是O(n^5)而不是O(n^4),因为内部循环也由n^2限定。我不同意“过于本地化”的评论。计算大Oh是算法分析的核心部分。对于那些试图熟练掌握这一领域知识的人来说,带有Big Oh估计值的特定代码示例非常有价值。