有人能给我解释一下获得这个java代码答案的正确步骤吗,BigO/运行时间? sum=0; 对于(i=0;i

有人能给我解释一下获得这个java代码答案的正确步骤吗,BigO/运行时间? sum=0; 对于(i=0;i,java,big-o,Java,Big O,考虑循环运行的次数。第一个用于sqrt(n)/2迭代,第二个sqrt(n)/4,最后一个用于8+j,其中j是某个值(循环中的常量)。因此,对于整个代码,我们的复杂性为sqrt(n)/2+sqrt(n)/4+8+j。为了得到大O符号,我们取其中增长最快的一个,忽略常数,即sqrt(n)。这给了我们,代码在sqrt(n)时间内运行一个大n。现在我们只需找到一个n,使得sqrt(n)=40,这就是40^2=1600 还要注意,这个问题有点傻,因为大O表示法只处理与大n值的比较(因为我们忽略了常数和大多

考虑循环运行的次数。第一个用于
sqrt(n)/2
迭代,第二个
sqrt(n)/4
,最后一个用于
8+j
,其中j是某个值(循环中的常量)。因此,对于整个代码,我们的复杂性为
sqrt(n)/2+sqrt(n)/4+8+j
。为了得到大O符号,我们取其中增长最快的一个,忽略常数,即
sqrt(n)
。这给了我们,代码在
sqrt(n)
时间内运行一个大n。现在我们只需找到一个n,使得
sqrt(n)=40
,这就是40^2=1600


还要注意,这个问题有点傻,因为大O表示法只处理与大n值的比较(因为我们忽略了常数和大多数项)。因此,用它们进行任何形式的计算都是非常奇怪的。

带有i的for循环与带有j和k的for循环的运行时间大致相同。 这是因为j从0循环到sqrt(n)/4,其中k从0循环到8+j,这足够接近从0循环到j。因此,循环j和k迭代sqrt(n)/4*2次,这就是sqrt(n)/2,与包含i的循环的迭代量相同

基本上你可以把它归结为

sum = 0;
 for(i=0;i<sqrt(n)/2;i++)
sum++;
 for(j=0;j<sqrt(n)/4;j++)
sum++;
for(k=0; k<8+j; k++)
 sum++; 
for(i=0;i

在完成这个简化之后,您就可以插入n了。

所有与
n
相关的运行时都处理
n
的平方根

我们知道,运行时间与n的平方根成正比,因此我们可以说,100的平方根与10ms的运行时间之比等于x的平方根与40ms的运行时间之比,其中x是n的值,可以在40ms内完成

从象征意义上讲,这看起来是这样的:

sqrt(100)/10=sqrt(x)/40

一点代数,你会得到
n
的值,它将在40秒内运行:

10/10=sqrt(x)/40

1=sqrt(x)/40

sqrt(x)=40


x=40^2非常感谢!所以我对其中一部分感到困惑,一旦我把所有常数都取出来,我会选择第一个sqrt(n)吗?因为它是最快的?一旦常数被删除,这两个都是
sqrt(n)
。除此之外,你“选择”哪一个并不重要。如果这回答了问题,请接受答案,将其从列表中删除“未回答的问题"列表。很抱歉打扰您,但我太困惑了。您能给我一个关于如何解决此问题的步骤列表吗!请帮助我!谢谢!我的最后一个问题是/2发生了什么,因为您将100插入到循环中,但您不应该使用100除以2的sqrt吗?我们只关心关于n的总体运行时间的变化。运行时时间分析,你放弃任何系数。很抱歉打扰你,但我真的很困惑。你能给我一个关于如何解决这个问题的步骤列表吗,比如从第一步开始?
for (i=0; i < sqrt(n); i++)