T(n) = 8*T(n/2) + n*n
T(n) = 3*T(n/4) + n
我想计算Big O表示法的时间复杂度。答案是什么(不使用主定理)
答案 0 :(得分:4)
主定理适用于T(n) = a*T(n/b) + n^c
形式的任何重复。它查看并比较了重复的两个部分:
1)这个级别的常量工作的大小(c) 2)递归调用的数量和大小(a和b)
从这里开始,我们将log_b(a)与c进行比较。有三种可能性
log_b (a) > c
- > T(n)
是O(n^log_b (a))
log_b (a) < c
- &gt; T(n)
是O(n^c)
log_b (a) = c
- &gt; T(n)
是O(n^c log(n))
所以你的两个例子......
T(n) = 8*T(n/2) + n*n
,因此a = 8, b = 2, c = 2
,log_2 (8) > 2
,因此T(n)
为O(n^(log_2 (8))
= O(n^3)
T(n) = 3 * T(n/4) + n
,因此a = 3, b = 4, c = 1
,log_4 (3) < 1
,因此T(n)
为O(n^c)
= O(n)
答案 1 :(得分:2)
对于第一个关系,您可以这样做: