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("*")
上述算法的时间复杂度是多少?
答案 0 :(得分:1)
这听起来像是一个家庭作业问题,但非常有趣,所以我会拍摄一下。我们只计算打印星号的次数,因为它占主导地位。
对于每个j
,只有那些可被i
整除的触发器执行最内层循环。他们中有多少人?那么,在[1, i*i)
范围内,这些是i, 2*i, 3*i, ..., (i-1)*i
。让我们走得更远。 k
从0
迭代到j
,首先我们将进行i
次迭代(对于j=i
),然后2*i
(对于j=2*i
}}),然后3*i
..直到我们迭代(i-1)*i
次。对于每个i + 2*i + 3*i + (i-1)*i
,这是总共i
个打印的星号。由于i
从0
变为n
,所以迭代总数是i + 2*i + 3*i + (i-1)*i
的总和,其中i
从0
变为n
}}。让我们总结一下:
这里我们多次使用公式来计算第一个n
数字的总和。在最终总和中占主导地位的因素显然是k^3
,因为第一个n-1
多维数据集之和的公式是
总复杂度为O(n^4)
。