Big o 家庭作业:寻找代码片段的大Oh

Big o 家庭作业:寻找代码片段的大Oh,big-o,Big O,为了让大家都知道,这是一个家庭作业。我不希望任何人给我提供详尽的答案,这更多的是检查我是否正确理解事情,或者找出我做错了什么 我已经得到了一些代码片段,以确定其中有多大。每一个都在处理for循环,但是我们得到的最后两个循环让我有点不舒服。第一: sum = 0; for (i = 0; i < n; i++) //1 for (j = 0; j < i * i; j++) //2 for (k = 0; k < j;

为了让大家都知道,这是一个家庭作业。我不希望任何人给我提供详尽的答案,这更多的是检查我是否正确理解事情,或者找出我做错了什么

我已经得到了一些代码片段,以确定其中有多大。每一个都在处理for循环,但是我们得到的最后两个循环让我有点不舒服。第一:

   sum = 0;
      for (i = 0; i < n; i++) //1
         for (j = 0; j < i * i; j++) //2
            for (k = 0; k < j; k++) //3
               sum++;
sum=0;
对于(i=0;i
我认为这个最大的Oh是O(n^4)#1将运行n次,#2将运行n^2次,#3将运行n次,给我n^4。然而,当我在C++中正确地写出这个值并且给出n值为10, 100和1000(按我的赋值)时,n=10返回7524(好,小于10000)n=100返回975002490的值,而上界则是100000000。显然,我对循环的分析有些偏离,但我不太确定在哪里。不确定n=1000会返回什么,因为我的电脑已经运行了一段时间,似乎还没有准备好给我一个答案

第二个片段如下:

   sum = 0;
      for (i = 0; i < n; i++) //1
         for (j = 0; j < i * i; j++) //2
            if (j % i == 0) //3
               for (k = 0; k < j; k++) //4
                  sum++;
sum=0;
对于(i=0;i

我相信我可以安全地忽略if语句,因为它的运行时间将是测试的运行时间加上它的内容,这意味着我将再次提出O(n^4)。

我不是一个大的O专家,但我知道循环和一些数学,所以我将尝试帮助您一点

当你认为你的语句“n 1将运行n次,α2将运行n^ 2次,而3次n将运行n次,给我n^ 4”,它只是部分正确。是的,如果分别运行循环,则数字几乎正确。但是考虑一个n=4的例子…首先#1将运行4次,但对于循环数的每次迭代#1循环数#2将运行i*i次。。。所以

首先,当i=0时,2将运行0次。。(j<0*0) 当i=1时,2将运行1次(j<1*1) 当i=2时,循环将运行4次(j<2*2) 当i=3时,2将运行9次(j<3*3)

因此总共#2将运行14次。(0+1+4+9)和4^4不是14。这也会升级到#3循环


正如您所说,您对直接答案不感兴趣,我希望这有助于您更好地理解for循环。

如果根据您的分析,j循环应该运行n^2次,那么k循环不是也会通过相同的参数运行n^2次吗?渐近分析在很大程度上忽略了常数因子,这在现实场景中可能是一个问题。