【问题标题】:i have written a python code to find maximum element in a list我编写了一个 python 代码来查找列表中的最大元素
【发布时间】:2020-03-26 18:55:15
【问题描述】:

你能告诉我代码的时间复杂度吗?我使用的是分而治之的技术?

def max_of_list(l):
  if(len(l)==1):
    return l[0]
  else:
    left_max=max_of_list(l[:len(l)//2])
    righ_max=max_of_list(l[len(l)//2:])
    return max(left_max,righ_max)

【问题讨论】:

  • 列表未排序
  • 你最终还是调用了内置的max——为什么不直接调用整个列表呢?
  • 我只使用 in 用于 2 个值
  • 我找不到时间复杂度,我认为这是 log(n)
  • 实际上是 O(n),对于仅使用比较在无序数组中进行选择的问题,没有算法具有下限。

标签: python algorithm recursion divide-and-conquer


【解决方案1】:

您需要使用主定理,因为这是一种递归算法:

T(n) = a T(n/b) + f(n)

a:子问题的数量

b:子问题的大小缩减

f(n): 子问题过程拆分/连接的复杂度

这个算法是递归的,因为 f(n) 分割/连接的过程具有 O(1) 的复杂度。因此,算法的复杂度为 O(n^c),其中 c 是关键指数,由下式给出:

c = log(a) / log(b)

在这种特殊情况下:

c = log(2)/log(2) = 1

因此,算法的复杂度是线性的:例如O(n)

您可以阅读更多关于Master theorem

【讨论】:

    猜你喜欢
    • 2020-02-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2020-12-05
    • 2015-01-17
    相关资源
    最近更新 更多