繁体   English   中英

以下python函数的时间复杂度是多少?

[英]What's the time complexity for the following python function?

def func(n):
    if n == 1:
        return 1
    return func(n-1) + n*(n-1)

print func(5)

感到困惑。 不确定到底是什么。 O(n)吗?

计算n*(n-1)是固定时间的操作。 该函数有趣的部分是调用func(n-1)直到n1为止。 该函数将进行n此类调用,因此其复杂度为O(n)

如果我们假设算术运算是恒定时间运算(并且实际上是在数字相对较小的时候),那么时间复杂度为O(n)

T(n) = T(n-1) + C = T(n-2) + C + C = ... = n * C = O(n)

但是实际中乘法的复杂度取决于底层类型(而我们谈论的是Python取决于类型的值)。 N接近无穷大时,它取决于N 因此,严格来说,复杂度等于:

T(n) = O(n * multComplexity(n))

并且此multComplexity(n)取决于用于大数乘法的特定算法。

如其他答案中所述,出于实用目的,答案接近O(n) 为了进行更精确的分析,如果您不想近似地认为乘法是恒定时间的:

计算n*(n-1)需要O(log n * log n) (或O(log n)^1.58 ,取决于Python使用的算法,该算法取决于整数的大小)。 请参阅此处 -请注意,由于复杂度与位数有关,因此我们需要log

将两个项相加需要O(log n) ,所以我们可以忽略它。

乘法完成O(n)次,因此总数为O(n * log n * log n) (可能有可能使此约束更严格,但它肯定大于O(n) -请参见WolframAlpha图 )。

实际上,除非n很大,对log项才真正重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM