【问题标题】:finding the worst-case runtime using O-notation使用 O 表示法找到最坏情况的运行时
【发布时间】:2021-09-21 05:07:21
【问题描述】:

我是 O 表示法的新手,我正在尝试从这些给定的界限中使用大 O 表示法确定最坏情况运行时间的最严格界限:

  1. O(1)
  2. O(log n)
  3. O(n)
  4. O(n log n)
  5. O(n**2)
  6. O(n**3)
  7. O(2**n) 作为实践,我在所有代码的注释中添加了最严格的界限,但我无法确定哪些情况将与抽象列表函数一起使用。例如,我在下面有两个简单的代码来求和:

例子:

def sums1(L):
  even = list(filter(lambda x: x%2==0, L))
  odd = list(filter(lambda x: x%2==1, L))
  return even + odd

def susm2(L):
  if L == []: 
    return 0
  s1 = sum(L)
  s2 = sums2(L[1:])
  s3 = sums2(L[2:])
  return s1+s2+s3

根据我的理解,第一个代码将运行 O(n^2) 次,因为添加了两个抽象列表,第二个将运行 O(2^n)。但是,我在网上找不到任何类似的代码来看看我是否正确,所以我想我会在这里问。非常感谢任何关于运行多少次的指导。 :D

【问题讨论】:

    标签: python-3.x algorithm runtime big-o computer-science


    【解决方案1】:

    关于sums1,我相信你会有O(n)的复杂度,其中nL中元素的数量。详细说明:

    def sums1(L):
        even = list(filter(lambda x: x%2==0, L)) # O(n)
        odd = list(filter(lambda x: x%2==1, L))  # O(n)
        return even + odd                        # O(n)
    

    创建oddeven 列表需要O(n),因为您需要遍历L 两次。

    连接两个列表 oddeven 也是线性的,O(n)。因为要连接两个列表,在最坏的情况下,您必须遍历第一个,直到找到它的最后一个元素。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-23
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多