Data structures 为什么这些嵌套循环的运行时间是O(n)

Data structures 为什么这些嵌套循环的运行时间是O(n),data-structures,big-o,Data Structures,Big O,为什么这个的运行时间是开着的?它不应该是Olog n*On=Onlog n吗?因为第一个循环有Olog n,第二个循环有Olog n 对不起,我是大O分析的新手。事实上,复杂性正在增加。请注意,内环依赖于外环,因为我们有j=j+i,内环的每一圈都不会贡献相同的运行时间,因此,仅将外环的复杂度乘以内环的复杂度以获得总运行时间是不合适的 事实上,对于给定的i,由于我们每圈增加j,内部循环取值1,1+i,1+2i,…,因此总共有n/i个可能的值 由于外环仅取2的幂次值,即1、2、4,…,因此我们有以下

为什么这个的运行时间是开着的?它不应该是Olog n*On=Onlog n吗?因为第一个循环有Olog n,第二个循环有Olog n

对不起,我是大O分析的新手。

事实上,复杂性正在增加。请注意,内环依赖于外环,因为我们有j=j+i,内环的每一圈都不会贡献相同的运行时间,因此,仅将外环的复杂度乘以内环的复杂度以获得总运行时间是不合适的

事实上,对于给定的i,由于我们每圈增加j,内部循环取值1,1+i,1+2i,…,因此总共有n/i个可能的值

由于外环仅取2的幂次值,即1、2、4,…,因此我们有以下内容:

for(i=1; i<=n; i=i*2)
    for(j=1; j<=n; j=j+i) 
      x++;
因此,复杂性由以下公式得出:

i                No. of values the inner loop takes = n / i
------------------------------------------------------------
1                      n / 1 = n / (2^0)
2                      n / 2 = n / (2^1)
4                      n / 4 = n / (2^2)
.                            .
.                            . 
.                            .
2^⌊log(n)⌋               n / (2^⌊log(n)⌋)
事实上,复杂性正在增加。请注意,内环依赖于外环,因为我们有j=j+i,内环的每一圈都不会贡献相同的运行时间,因此,仅将外环的复杂度乘以内环的复杂度以获得总运行时间是不合适的

事实上,对于给定的i,由于我们每圈增加j,内部循环取值1,1+i,1+2i,…,因此总共有n/i个可能的值

由于外环仅取2的幂次值,即1、2、4,…,因此我们有以下内容:

for(i=1; i<=n; i=i*2)
    for(j=1; j<=n; j=j+i) 
      x++;
因此,复杂性由以下公式得出:

i                No. of values the inner loop takes = n / i
------------------------------------------------------------
1                      n / 1 = n / (2^0)
2                      n / 2 = n / (2^1)
4                      n / 4 = n / (2^2)
.                            .
.                            . 
.                            .
2^⌊log(n)⌋               n / (2^⌊log(n)⌋)
是的,它是Onlogn。 解释-在第一个循环中,你每跳第二个元素,每个元素你都要跑n次。因此Onlogn

是的,它是Onlogn。
解释-在第一个循环中,你每跳第二个元素,每个元素你都要跑n次。因此,Onlogn

您可以使用西格玛符号进行如下操作:


您可以使用Sigma符号进行如下操作:


内循环不进行n次迭代;它进行n/lgn迭代,因为它每次都以i递增。我想说OP是正确的:Onlog n,因为外循环做logn循环,而内循环,就在第一次外循环迭代中,i=1做n次n/2的循环,对于i=2,对于i=4,n/4……大的oh符号并不严密;说循环在lg n时间运行在技术上可能是正确的,但这样说的理由很弱,并不排除更严格的界限,例如On也是正确的。因为下面的一些回答似乎回答了您的问题,请把他们中的一个标记为“接受”,点击他们的投票数以下的记号。这将显示哪个答案对您帮助最大,并为答案的作者和您分配声誉点数!。通过投票和接受答案来确定好的问题和答案是这个网站想法的一部分;它进行n/lgn迭代,因为它每次都以i递增。我想说OP是正确的:Onlog n,因为外循环做logn循环,而内循环,就在第一次外循环迭代中,i=1做n次n/2的循环,对于i=2,对于i=4,n/4……大的oh符号并不严密;说循环在lg n时间运行在技术上可能是正确的,但这样说的理由很弱,并不排除更严格的界限,例如On也是正确的。因为下面的一些回答似乎回答了您的问题,请把他们中的一个标记为“接受”,点击他们的投票数以下的记号。这将显示哪个答案对您帮助最大,并为答案的作者和您分配声誉点数!。通过投票和接受答案来确定好的问题和答案是本网站想法的一部分。