【发布时间】:2016-09-05 11:56:28
【问题描述】:
我见过很多时间复杂度问题,但似乎没有一个能帮助我理解它——就像真的明白了一样。
我从阅读和实践尝试中得到的一切似乎都归结为Determining complexity for recursive functions (Big O notation) 在编码员给出的答案中提到的内容 - 实际上这确实帮助我更多地了解了时间复杂度的情况.
这样的函数怎么样:
def f(n):
if n < 3:
return n
if n >= 3:
return f(n-1) + 2*f(n-2) + 3*f(n-3)
既然函数调用了函数3次,那是否意味着时间复杂度是O(3^n)?
至于空间复杂度,它似乎是线性的,因此我建议复杂度为 O(n)。
我错了吗?
【问题讨论】:
-
你必须写下递归关系,然后解决它们。在简单的情况下有一些简单的技巧(例如:嵌套的独立循环),但通常你必须做数学。阅读一本描述复杂性分析方法的书可能比随机挑选困难的例子和猜测哪些方法可能有效更有帮助。这里时间复杂度的递归关系将为您提供 not O(3^n) 的 Tribonacci 数。
标签: python recursion time-complexity