[英]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,然后对于n是b的幂,如果
你复发的英文翻译
Master Theorem中最关键的是要理解递归中提到的常数a、b和c 。 让我们以您自己的循环为例 - T(n) = 3T(n/2) + n - 例如。
这种递归实际上是说它所代表的算法是这样的,
(解决一个大小为n的问题的时间)=(解决三个大小为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 定理解决这个问题,也可以通过以下方式打开递归树:
请查看第 60 页http://www.cs.columbia.edu/~cs4205/files/CM2.pdf 。
也许你应该在这里问https://math.stackexchange.com/
像这样的问题可以使用Masters 定理来解决。
在你的情况下a = 3
, b = 2
和f(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.