[英]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.