簡體   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