用迭代,替换,主定理来解决重现问题?

时间:2017-10-01 01:59:53

标签: algorithm math asymptotic-complexity recurrence

我熟悉使用迭代解决重现:

t(1) = c1
t(2) = t(1) + c2 = c1 + c2
t(3) = t(2) + c2 = c1 + 2c2
...
t(n) = c1 + (n-1)c2 = O(n)

但是,如果我没有基本情况再次发生怎么办?我如何使用标题中提到的三种方法解决它?

t(n) = 2t(n/2) + 1

对于大师定理,我知道第一步,找到abf(n)

a = 2
b = 2
f(n) = 1

但不是从这里开始的。我处于停滞状态,因为我不确定如何处理这个问题。

2 个答案:

答案 0 :(得分:2)

我知道解决这个问题的两种方法:

(1) T(n) = 2T(n/2) + 1
(2) T(n/2) = 2T(n/4) + 1
now replace T(n/2) from (2) into (1)

T(n) = 2[2T(n/4) + 1] + 1
     = 2^2T(n/4) + 2 + 1

T(n/4) = 2T(n/8) + 1
T(n) = 2^2[2T(n/8) + 1] + 2 + 1
     = 2^3T(n/8) + 4 + 2 + 1

你可以继续这样做,直到你可以概括为止。最终你会发现:

T(n) = 2^kT(n/2^k) + sum(2^(k-1))

你想要T(1)所以设置n / 2 ^ k = 1并求k。当你这样做时,你会发现,k = lgn

替换lgn为k,你最终将

T(n) = 2^lgnT(n/2^lgn) + (1 - 2^lgn) / (1 - 2)
2^lgn = n so,

T(n) = nT(1) + n - 1
T(n) = n + n - 1 where n is the dominant term.  

对于大师定理来说它真的很快

Consider, T(n) = aT(n/b) + n^c for n>1

有三种情况(注意b是对数基数)

(1)  if logb a < c, T(n)=Θ(n^c),

(2)  if logb a = c, T (n) = Θ(n^c log n),

(3)  if logb a > c, T(n) = Θ(n^(logb a)).

在这种情况下,a = 2,b = 2,并且c = 0(n ^ 0 = 1)

快速检查显示案例3.

n^(log2 2)

note log2 2 is 1

So by master theorem this is Θ(n)

答案 1 :(得分:1)

除了主定理,递归树方法和迭代方法之外,还有 称为“替代方法”。

通常您会发现有人谈论 替代方法,实际上它们是指迭代方法(尤其是在Youtube上)。 我猜这源于以下事实:在迭代方法中,您也替换了 某事物,即第n+1个第n个递归调用...

有关算法的标准参考书 (CLRS) 定义如下:

  

替代方法

     
      
  1. 猜猜解决方案的形式。
  2.   
  3. 使用数学归纳法找到常数,并证明该解决方案有效。
  4.   

作为示例,让我们考虑您的递归方程:T(n) = 2T(ⁿ/₂)+1

我们猜想解决方案是T(n) ∈ O(n²),所以我们必须证明 T(n) ≤ cn²代表某个常数c
另外,我们假设您为n=1做着不停的工作c

给出:

T(1) ≤ c
T(n) = 2T(ⁿ/₂)+1  

要证明:

∃c > 0, ∃n₀ ∈ ℕ, ∀n ≥ n₀, such that T(n) ≤ cn² is true.

基本案例:

n=1:  T(1) ≤ c    
n=2:  T(2) ≤ T(1) + T(1) + 1 ≤ 4c
             (≤c)   (≤c)      (cn²) 

归纳步骤:

作为归纳假设,我们假设所有小于T(n) ≤ cn²的正数为n 特别是对于(ⁿ/₂)

因此T(ⁿ/₂) ≤ c(ⁿ/₂)²,因此

T(n) ≤ 2c(ⁿ/₂)² + 1     ⟵ Here we're substituting c(ⁿ/₂)² for T(ⁿ/₂)
     = (¹/₂)cn² + 1
     ≤ cn²  (for c ≥ 2, and all n ∈ ℕ)   

因此我们已经证明,存在一个常量c,使得T(n) ≤ cn²对所有n ∈ ℕ都是正确的。 这恰好意味着T(n) ∈ O(n²)。 ∎

(对于Ω,因此对于Θ,证明是相似的)。