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("*")