【问题标题】:Asymptotic analysis: Python Big-O homework渐近分析:Python Big-O 作业
【发布时间】: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


【解决方案1】:

您可能会将复杂性视为完成给定任务所需的简单操作的数量。现在,您的外部循环说您执行了给定的操作log(n) 次,您在问题中正确指出了这一点。然而,这些操作并不简单——它们包括执行一个循环。这个循环执行O(n^2) 简单的操作,再次,您正确指出。现在试着想想代码片段执行的简单操作的总数是多少?

注意:在我的回答中,我假设加法和整数除法是简单的操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多