【发布时间】:2014-03-23 21:49:29
【问题描述】:
我有一个作业问题,要求我对以下 Python 代码的最坏情况时间复杂度进行严格的大估计:
sum = 0
i = n
while i > 1:
for k in range(n*n):
sum = sum + k*i
i = i // 2
由于 i = i // 2 行,外部循环似乎具有 O(log n) 时间复杂度。 内部循环似乎具有 O(n^2) 时间复杂度,因为范围是 n*n。 这两个循环似乎彼此独立,所以整体时间复杂度会是 O(n^2) 吗?
【问题讨论】:
-
如果你必须在 5 个不同的建筑物中走 100 级楼梯,你需要爬多少级?
-
这两个循环不是独立的;另一个循环循环LogN次,所以内部循环执行了很多次。
-
术语“最坏情况下的时间复杂度”在这里并不适用。您可以找到该算法的大 theta。
-
@MartijnPieters 我想我的措辞很差。我的意思是每次执行外循环时,内循环仍将执行 n*n 次。所以你是说他们的正确答案是 O(LogN)?那么这是否意味着内循环的复杂性无关紧要,而重要的是外循环执行了多少次?
-
根据你的分析,不应该是
O(n^2lgn)吗?
标签: python big-o asymptotic-complexity