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

Time complexity 依赖和条件三重for循环的时间复杂度,time-complexity,big-o,Time Complexity,Big O,上述算法的时间复杂度是多少?这听起来像是一个家庭作业问题,但非常有趣,所以我来试一试。我们将只计算星号打印的次数,因为它占主导地位 对于每个j,只有那些可被i整除的循环才会触发最内层循环的执行。他们有多少人?好的,在范围[1,i*i)中,那些是i,2*i,3*i,…(i-1)*i。让我们更进一步。k从0迭代到j,所以首先我们将进行i迭代(对于j=i),然后是2*i(对于j=2*i),然后是3i,直到迭代i)*i次。这是每个i的i+2*i+3*i+(i-1)*i打印星号。由于i从0变为n,因此总迭

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

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

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

这里我们多次使用了第一个
n
数的和的公式。在最终和中占主导地位的因子显然是
k^3
,并且因为第一个
n-1
立方体的和的公式是

,


总的复杂度是O(n^4)

这是我过去考试中的一个问题经过分析后,我发现语句3只适用于n次。由此我们可以推断第5个语句不会运行n**3次。它应该是O(n^3)吗?看一下上面的评论。事实上,我目前通过手机上网。所以我无法很好地描述。看一下上面的评论。我认为应该是O(n**3)…今天晚些时候我会更有效地向你解释。@AbhishekKhandelwal我已经为你写下了每一行证明这是
O(n^4)
,请仔细检查。如果您仍然不确信,请尝试计算执行的次数,例如
n
3n
足够大的
n
。您会注意到该比率接近81。您可以对任意
n
kn
进行相同的计算,您会发现该比率为接近
k^4
@AbhishekKhandelwal我进一步扩展了我的答案,希望现在能更清楚地得到迭代的总次数,它给出了
O(n^4)
复杂性。但是我的同事相信复杂性是O(n^5)。但我不明白为什么。你能描述一下他为什么说O(n^5)。
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("*")