簡體   English   中英

計算復雜性和遞歸——這個分析正確嗎?

[英]Computational complexity and recursion - Is this analysis correct?

在此處輸入圖像描述

嗨,我對此算法分析的分辨率有疑問,特別是指返回 min(L[i:j+1]) :為什么它被認為是 O(n)?:它總是指一個定義的切片,與有限的可能維度 (j<=i+2)

為簡單起見,將列表的大小視為 3 的冪。


算法

if j-i+1 <= 3:
    # Compute their minimum
    return min(i:j+1)

if語句 forms 是基本情況。 上述語句的時間復雜度為O(1) 但是, if 語句將被執行n次。


遞歸樹

                                     T(n)
                                       |
                 ______________________|______________________
                |                      |                      |
                |                      |                      |
             T(n/3)                 T(n/3)                 T(n/3)
                |                      |                      |
         _______|_______        _______|_______        _______|_______
        |       |       |      |       |       |      |       |       |
        |       |       |      |       |       |      |       |       |
     T(n/9)  T(n/9)  T(n/9) T(n/9)  T(n/9)  T(n/9) T(n/9)  T(n/9)  T(n/9)

        .       .       .      .       .       .      .       .       .
        .       .       .      .       .       .      .       .       .
        .       .       .      .       .       .      .       .       . 
        .       .       .      .       .       .      .       .       .    
      T(1)    T(1)    T(1)   T(1)    T(1)    T(1)   T(1)    T(1)    T(1)    --- (n/3) * T(1)      

從遞歸樹中應該很明顯,對於一個大小為n的數組, if語句將被執行n/3次。 因此, if語句的整體復雜度為O(n)


if被執行n/3次而不是n的原因是當我們遇到大小為 3 的子數組時遞歸結束 如果遞歸在遇到大小為 1 的子數組時結束,那么它將執行 n 次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM