当前位置: 首页 > 知识库问答 >
问题:

Python-如何计算递归函数的时间复杂性?

劳研
2023-03-14

我想用尽可能多的方法解决塔式料斗问题,并计算每种方法的时间复杂性(仅用于自我练习)。解决方案之一是:

def is_hopable(arr):
    if len(arr) < 1 or arr[0] == 0:
        return False
    if arr[0] >= len(arr):
        return True
    res = False
    for i in range(1,arr[0]+1):
        res = res or is_hopable(arr[i:]) # This line  
    return res

我知道递归时间复杂度计算的一般想法,但我在分析注释行(在 for 循环内)时遇到了麻烦。通常我用 T(n) = C T(那条线)计算时间复杂度,并用一般表达式(例如 T(n-k))降低它,直到我达到基本情况并且可以用 n 表示 k,但是 for 循环的时间复杂度是多少?

共有1个答案

颛孙嘉石
2023-03-14

循环的复杂度可能高达O(n^2),因为循环的每次迭代(最多n次迭代)都会执行一个切片arr[i:],该切片返回arr的副本,而没有第一个i元素O(n)。考虑到这一点,总时间是O(n^3)

提到的上限是紧的。< br >示例:< code>arr = [n-1,n-2,n-3,...,1,1]
替代形式:< code>arr[i] = n - 1 - i对于所有< code>i,< code>0

由于T(n)下界是3次多项式,我们发现问题运行时间的这种情况是ω(n^3)证明问题(O(n^3))的上界是紧的。

旁注:
如果您使用原始数组和当前索引作为参数,循环的运行时将为O(n),总时间O(n^2)

 类似资料:
  • 顺便说一句,我试图解决时间复杂性,我找到了O(2^n)。正确吗?

  • 我在考虑如何正确计算这个函数的时间复杂度: 我假设它是 O(n),其中 n 是列表的长度。我们的 while 循环是 O(n),for 循环也是 O(n), 这意味着我们得到了 2*O(n),等于 O(n)。 我说的对吗?

  • 这里是一个递归函数。它遍历字符串映射()。检查()如果等于所需的字符串(),则打印它(),并再次为该执行函数。 停下来没有规则,似乎完全是随机的。这个函数的时间复杂度是如何计算出来的?

  • 如何计算以下函数的时间复杂度? 现在,我知道循环具有O(n)时间复杂度,但在这种情况下,I以更快的速度增长。一次又一次地迭代,我发现,对于每一个第m次迭代,I=m^2。但我仍然不知道如何计算大O。

  • 我已经通过谷歌和堆栈溢出搜索,但我没有找到一个关于如何计算时间复杂度的清晰而直接的解释。 说代码像下面这样简单: 说一个像下面这样的循环: 这将只执行一次。 时间实际上被计算为而不是声明。

  • 我在理解算法的时间复杂性方面有问题。 让我们举第一个例子,用这个算法在二叉搜索树中进行搜索: 那么,如何计算这个时间复杂度呢? null