依赖和条件三重for循环的时间复杂度

时间:2017-10-04 10:27:46

标签: time-complexity big-o

for i in xrange(1,n+1):
    for j in xrange(1,i*i):
        if j%i==0:
            for k in xrange(0,j):
                print("*")

上述算法的时间复杂度是多少?

1 个答案:

答案 0 :(得分:1)

这听起来像是一个家庭作业问题,但非常有趣,所以我会拍摄一下。我们只计算打印星号的次数,因为它占主导地位。

对于每个j,只有那些可被i整除的触发器执行最内层循环。他们中有多少人?那么,在[1, i*i)范围内,这些是i, 2*i, 3*i, ..., (i-1)*i。让我们走得更远。 k0迭代到j,首先我们将进行i次迭代(对于j=i),然后2*i(对于j=2*i }}),然后3*i ..直到我们迭代(i-1)*i次。对于每个i + 2*i + 3*i + (i-1)*i ,这是总共i个打印的星号。由于i0变为n,所以迭代总数是i + 2*i + 3*i + (i-1)*i的总和,其中i0变为n }}。让我们总结一下:

enter image description here

这里我们多次使用公式来计算第一个n数字的总和。在最终总和中占主导地位的因素显然是k^3,因为第一个n-1多维数据集之和的公式是

enter image description here

总复杂度为O(n^4)