此for循环的运行时间复杂度如何

时间:2018-10-21 06:09:50

标签: c++ algorithm time-complexity

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=1000000 以2为底

我知道,每次它减少一位数时,在这种情况下,它总共执行7次。我不知道怎么算一般时间。

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

for(int q = t; q > p; q >>= 1)

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

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

1 个答案:

答案 0 :(得分:0)

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

不包括sort2循环内的for函数复杂度。

说明:

  • 外部循环的复杂度为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循环和最外部的循环:

enter image description here