簡體   English   中英

遞歸 2T(n-1)+O(n) 的時間復雜度是多少?

[英]What is the time complexity of recurrence 2T(n-1)+O(n)?

T(n) = 2T(n-1) + O(n) 的漸近復雜度是多少? 我想它是使用替換方法解決的..如何解決這種重復問題? 您可以假設算法在達到 T(1) 時停止。

這里不能使用主定理,因為尺寸收縮因子 b (=(n-1)/n) 基本上等於 1。

但是,如果計算前幾項,則可以很容易地看到時間復雜度為 2**n:

T(1) = 1                                = 1
T(2) = 2*1 + O(n)                       = 2 + O(n)
T(3) = 2*(2*1 + O(n)) + O(n)            = 2**2 + 3O(n)
T(4) = 2*(2*(2*1 + O(n)) + O(n)) + O(n) = 2**3 + 7O(n)
    :    :    :    :    :    :    :    :    :
T(n) = 2**(n-1) + O(n) * (2**(n-1)-1)   ≈ O(2**n)

替換方法有一個技巧。 如果你嘗試直接的方法,你會得到

T(n) <=? 2^n
T(n) = 2 T(n-1) + cn
     <= 2^(n-1) + 2^(n-1) + cn
     = 2^n + cn,

不小於或等於2^n 解決方案並不直觀:減去一個低階項。 省略一些擺弄以獲得正確的,

T(n) <=? d 2^n - cn - 2c
T(n) = 2 T(n-1) + cn
     <= 2 (d 2^(n-1) - c (n-1) - 2c) + cn
     = d 2^n - cn - 2c,

並設置d以覆蓋基本情況。 (鑒於您想要大 O,您甚至不需要非常准確地猜測正確的術語。)

暫無
暫無

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

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