这个for循环的运行时间复杂度是多少

Posted

技术标签:

【中文标题】这个for循环的运行时间复杂度是多少【英文标题】:What is the running time complexity of this for loop 【发布时间】:2018-10-21 06:09:49 【问题描述】:
for (int p = t; p > 0; p >>= 1) 
    for (int i = 0; i < n - p; ++i) 
        if ((i & p) != 0) 
            sort2(a, i, i+p);
        
    
    for(int q = t; q > p; q >>= 1) 
        for(int i = 0; i < n- q; ++i) 
            if ((i & p) != 0) 
                sort2(a, i+p, i+q);
            
        
    

这里n是某个正整数,t大于n/2,但不等于n

据我了解,内部 for 循环运行了 (n-p) 次,但我无法弄清楚外部 for 循环。

我试着找到它如下:

如果t=64n=100,则取p的二进制值,等于64,所以p=1000000base 2

我了解每次减少一位数,在这种情况下总共执行 7 次。我不知何故无法弄清楚一般时间。

另外,我的理解是第三个 for 循环,即

for(int q = t; q &gt; p; q &gt;&gt;= 1)

根本不执行,因为条件q&gt;p 不满足p=q=t

这是正确的吗?我只是从算法开始。

【问题讨论】:

左大括号比右大括号多,缩进没有帮助。 什么是sort2 【参考方案1】:

为此:复杂度为BigO( log(t)(n-t)log(t) )

排除for循环内的sort2函数复杂度。

说明:

外循环复杂度为log(p)+1 [每次将位右移 1 并转到greater than 0],因此对于 t = 64,循环将变为 [64, 32, 16, 8, 4、2、1]。 内循环复杂度将是greater of ( O(n-p), O((n-t)log(t)) )

执行

对于第二个内层循环嵌套了最外层循环的for循环:

【讨论】:

我的理解是还有一个 for 循环 for(int q = t; q > p; q >>= 1),所以,这个 for 循环是 (n-t)log(t) 和最终的外部 for 循环再次为 log(t),因此整体复杂度为 (n-t)(log(t))^2。请纠正我。 你有 2 个内部循环,这两个都没有嵌套,所以最后它们会被相加而不是相乘。 是的@Sree 你的权利,我还没有看到内部嵌套。我猜你已经编辑了你的代码。我已经改变了答案 不知道sort2的复杂性怎么回答?? @Nityanarayan44:Nityanarayan44 先生,如果你观察得当的话,这段代码中有四个循环,所有循环的复杂度都取决于sort2 的复杂度。

以上是关于这个for循环的运行时间复杂度是多少的主要内容,如果未能解决你的问题,请参考以下文章

Python中嵌套For循环的时间复杂度

这个算法的时间复杂度是多少

以下代码的时间复杂度是多少?

这个程序的空间复杂性是多少?

具有多个 if 语句的嵌套 for 循环的时间复杂度

该代码的时间复杂度是多少?