我有一个功课问题,要求我对以下Python代码的最坏情况时间复杂性进行严格估计:
sum = 0
i = n
while i > 1:
for k in range(n*n):
sum = sum + k*i
i = i // 2
外部循环似乎具有O(log n)时间复杂度,因为行i = i // 2。 内环似乎具有O(n ^ 2)时间复杂度,因为范围是n * n。 这两个循环似乎彼此独立,因此整体时间复杂度为O(n ^ 2)?
答案 0 :(得分:0)
您可以将复杂性视为完成给定任务所需的简单操作的数量。现在你的外循环说你执行了log(n)
次给定的操作,你在问题中正确指出了。然而,这些操作并不简单 - 它们包括执行循环。此循环执行O(n^2)
个简单操作,因为您再次正确指出。现在试着想一想代码片段执行的简单操作的总数是多少?
注意:在我的回答中,我假设加法和积分除法是简单的操作。