繁体   English   中英

求解递归:T(n)=3T(n/2)+n

[英]Solving a recurrence: T(n)=3T(n/2)+n

我需要找到 n 的递归解,如果T(n)=3T(n/2)+n for n>1 和 T(n)=1 否则为T(n)=3T(n/2)+n的幂。

使用替换n=2^m,S(m)=T(2^(m-1))我可以得到:

S(m)=2^m+3*2^(m-1)+3^2*2^(m-2)+⋯+3^(m-1) 2^1+3^m

但我不知道如何简单地做到这一点。

这些类型的递归最容易通过主定理来解决,用于分析算法,解释如下:

a为大于或等于 1 的整数, b为大于 1 的实数, c为正实数。 鉴于形式的重复 -

T (n) = a * T(n/b) + n c其中 n > 1,然后对于nb的幂,如果

  1. Log b a < c, T (n) = Θ(n c );
  2. Log b a = c, T (n) = Θ(n c * Log n);
  3. Log b a > c, T (n) = Θ(n log b a )。

你复发的英文翻译

Master Theorem中最关键的是要理解递归中提到的常数a、b和c 让我们以您自己的循环为例 - T(n) = 3T(n/2) + n - 例如。

这种递归实际上是说它所代表的算法是这样的,

(解决一个大小为n的问题的时间)=(解决三个大小为n/2 的问题所花费的时间)+ n

最后的n是合并这3 n/2大小问题的结果的成本。


现在,直观地您可以理解:

  • 如果“解决3个大小为n/2 的问题”的成本比“ n ”更重要,那么第一项将决定整体复杂度;
  • 如果成本“ n ”比“解决3个大小为n/2的问题”更重要,那么第二项将决定整体复杂度; 和,
  • 如果两个部分的权重相同,那么解决子问题并合并它们的结果将具有整体复合权重。

从以上三个直观的理解,只出现Master Theorem的三种情况。


在您的示例中,a = 3、b = 2 和 c = 1。因此它属于 case-3,因为 Log b a = Log 2 3 大于 1(c 的值)。

因此,复杂性很简单 - Θ(n log b a ) = Θ(n log 2 3 )

您可以使用 Masters 定理解决这个问题,也可以通过以下方式打开递归树:

  • 在递归树的根部,您将拥有 n 的工作。
  • 在第二阶段,树分裂成三个部分,每个部分的工作量是 n/2。
  • 继续前进,直到到达叶子。 整个工作叶将是: O (1) = O (n / 2 ^ k) 当: n = 2 ^ k。
  • 请注意,在每一步 m 有 3 ^ m 次拆分。
  • 现在我们将使用几何级数和对数规则将所有步骤组合在一起。 最后你会得到:T(n) = 3T(n/2)+n = 2n^(log3)-2n的计算

请查看第 60 页http://www.cs.columbia.edu/~cs4205/files/CM2.pdf

也许你应该在这里问https://math.stackexchange.com/

像这样的问题可以使用Masters 定理来解决。

在你的情况下a = 3b = 2f(n) = n

因此c = log_b(a) = log_2(3)大于 1,因此您属于第一种情况。 所以你的复杂性是:

O(n^{log_2(3)}) = O(n^{1.58})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM