Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Big o 运行时间的大Oh分析?_Big O - Fatal编程技术网

Big o 运行时间的大Oh分析?

Big o 运行时间的大Oh分析?,big-o,Big O,对于下面的每个程序片段,请对运行时间进行详细分析。我有两个问题,我不能100%确定是否有问题,有人能帮我吗 片段1: for( int i = 0; i < n; i++ ) for( int j = 0; j < n * n; j++ ) for( int k = 0; k < j; k++ ) sum++; lets say m = n^2 Sigm

对于下面的每个程序片段,请对运行时间进行详细分析。我有两个问题,我不能100%确定是否有问题,有人能帮我吗

片段1:

for( int  i  =  0;  i  <  n;  i++ )
      for(  int  j  =  0;  j  <  n  *  n;  j++ )
            for(  int  k  =  0;  k  <  j;  k++ )
                 sum++;
 lets say m = n^2
 Sigma(i=0...n)  m Sigma(j=0.....m) j
 => n * (m(m+1)/2)
 => n ^ 5
回答:^5上不太确定n*n

片段2:

for(  int  i  =  1;  i  <=  n;  i++ ) 
        for(  int  j  =  1;  j  <=  i  *  i;  j++ )
                             if (j % i == 0)
                   for(  int k  =  0;  k  <  j;  k++)
                  sum++;
last loop runs for i-1 times ...
Sigma(i=0...n)  Sigma(j=0.....i-1) Sigma(k=0.....j) k
approximately its Sigma(i=0...n) i^2 
~=> n^3

回答:在^4上,分解每个循环的问题空间。从最外面的环开始。循环到底是为了什么

对于第一个问题,我们有以下模式

外部循环将运行n次。 外部内部循环将运行n2次,不受内部循环当前值的限制。 最里面的循环将运行到j次,这导致它被外部内部循环的当前值绑定。 你的所有步骤都是线性的,这意味着你将以线性的方式从0到结束条件。 下面是总和的实际情况

那么,这将转化为什么呢?你得把总数摊开。不过不会是5点

对于第二个问题,我们有以下模式

外环最多运行n次,包括n次。 外-内循环最多运行i2次,包括i2次。 在j%i==0的条件下,最里面的循环最多运行j次。这意味着并非每次都执行最内部的循环。 我把这个问题留给你解决。您必须采取展开和并将其减少为代数对应项的方法。

对于片段1:

for( int  i  =  0;  i  <  n;  i++ )
      for(  int  j  =  0;  j  <  n  *  n;  j++ )
            for(  int  k  =  0;  k  <  j;  k++ )
                 sum++;
 lets say m = n^2
 Sigma(i=0...n)  m Sigma(j=0.....m) j
 => n * (m(m+1)/2)
 => n ^ 5
回答:在^5上

对于片段2:

for(  int  i  =  1;  i  <=  n;  i++ ) 
        for(  int  j  =  1;  j  <=  i  *  i;  j++ )
                             if (j % i == 0)
                   for(  int k  =  0;  k  <  j;  k++)
                  sum++;
last loop runs for i-1 times ...
Sigma(i=0...n)  Sigma(j=0.....i-1) Sigma(k=0.....j) k
approximately its Sigma(i=0...n) i^2 
~=> n^3

回答:在^3上,对于第一个循环,您循环n*n*n*1+2+…+n*n=n^3*nn+1/2=n^3*n^2+n+1/2=n^5+…=>在^5上。关于第二个,你的问题是什么?我只是想知道这是否是正确的答案??我不相信第一个循环是n^5,因为CAS系统似乎给了我一个不同的绘制循环的结果。我不能完全确定的第二个循环是n^4,因为最里面的循环并不是每次都执行。我在计数器长度中做了一个错误的假设,thnx用于指向!因为第二个循环只考虑i^2/i-1次,所以我们求和直到i-1