计算复发的复杂性

时间:2013-03-06 06:26:01

标签: recursion complexity-theory

我无法理解复发的概念。鉴于你有T(n) = 2T(n/2) +1,你如何计算这种关系的复杂性?我知道在mergesort中,关系是T(n) = 2T(n/2) + cn,你可以看到你有一个深度为log2 ^ n且cn在每个级别工作的树。但我不确定如何进行通用功能。有哪些教程可以清楚地解释这个?

1 个答案:

答案 0 :(得分:2)

你的重现的解决方案是T(n)∈Θ(n)。

让我们扩展公式:

  • T(n)= 2 * T(n / 2)+ 1.(给定)
  • T(n / 2)= 2 * T(n / 4)+ 1.(将n替换为n / 2)
  • T(n / 4)= 2 * T(n / 8)+ 1.(将n替换为n / 4)
  • T(n)= 2 *(2 * T(n / 4)+ 1)+ 1 = 4 * T(n / 4)+ 2 + 1.(替代)
  • T(n)= 2 *(2 *(2 * T(n / 8)+ 1)+ 1)+ 1 = 8 * T(n / 8)+ 4 + 2 + 1.(替代)< / LI>

做一些观察和分析:

  • 我们可以看到一种模式出现:T(n)= 2 k * T(n / 2 k )+(2 k - 1)。
  • 现在,让k = log 2 n。然后n = 2 k
  • 代入,我们得到:T(n)= n * T(n / n)+(n - 1)= n * T(1)+ n - 1.
  • 对于至少一个n,我们需要给T(n)一个具体的值。所以我们假设T(1)= 1。
  • 因此,T(n)= n * 1 + n - 1 = 2 * n - 1,其为Θ(n)。

资源:

但是,对于日常工作,解决这些重复的常用方法是使用Master theorem