有人可以帮我解决这个伪代码的时间复杂度分析吗?我在这里寻找最坏情况下的复杂性,我不知道是O(n ^ 4),O(n ^ 5)还是其他东西。如果您可以详细介绍如何精确解决问题,将不胜感激。
sum = 0 for i = 1 to n do for j = 1 to i*i do if j mod i == 0 then for k = 1 to j do sum = sum + 1
第一循环: O(n)
O(n)
第二个循环:i平均而言n/2,您可以有一个精确的公式,但是O(n²)
i
n/2
O(n²)
第三循环发生i在第二循环内的时间,因此是平均n/2时间。而且O(n²),也要进行估算。
所以O(n*n²*(1 + 1/n*n²)),我要说O(n^4)。这1/n是因为第三个循环1/n在第二个循环内大约发生了几次。
O(n*n²*(1 + 1/n*n²))
O(n^4)
1/n
这完全是估算,没有严格的证据,但这应该是正确的。您可以自己运行代码来确认。